Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Адон 01.03.05 20:29 Число просмотров: 2605
Автор: Lexxx Статус: Незарегистрированный пользователь Отредактировано 01.03.05 20:30 Количество правок: 1
|
> Это указатель на тип 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* и его можно преобразовывать к чему угодно. > > Вот, вроде бы как всё.
Правильно говоришь, но хочу немного добавить (к первому код-блоку):
int *s=SOMETHING;
char *p;
p=(char)((void(s));
Этот код должен работать т.к. не только (void*) можно кастить к любому типу, но и указатели любого типа можно кастить к (void*).
|
|
|