Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Это указатель на тип void. Вернее было бы сказать, что это... 28.01.05 23:45 Число просмотров: 4171
Автор: Heller <Heller> Статус: Elderman
|
Это указатель на тип void. Вернее было бы сказать, что это указатель неопределённого типа.
Вообще указатель одного типа привести к указателю другого типа нельзя. То есть на такую строчку:
int *s=SOMETHING;
char *p;
p=(char *)(s);
Компилятор будет материться. (С++ может и не будет, я с ним не знаком, но вот Сишный будет)
Указатели типа void этим не страдают - их можно преобразовывать к любому типу:
void *s=SOMETHING;
char *p;
p=(char *)(s);
Такой код будет нормально компилироваться.
Чаще всего указатели на тип void применяются в функциях, когда нужно вернуть указатель, но конечный тип может быть различным. Самый простой пример - функция malloc из одноимённой библиотеки:
int *x;
x=(int *)(malloc(sizeof(int)))
Здесь malloc выделяет память под тип int (при выделении памяти учитывается только размер в байтах - тип никак дополнительно в памяти не оговаривается) и возвращает указатель на тип void. Это необходимо для "универсальности" функции: мы точно так же могли бы выделять память и под char и под float и под что угодно - т. к. используется void* и его можно преобразовывать к чему угодно.
Вот, вроде бы как всё.
|
|
|