указатель void и его присвоение типу void - PullRequest
3 голосов
/ 24 апреля 2019

Проблема заключается в использовании типа данных void и присвоении некоторого значения переменной void.

#include<stdio.h>
#include<stdlib.h>
int main()
{
 void *pVoid;
 pVoid = (void*)0;
 printf("%lu",sizeof(pVoid));
 return 0;
}

что назначено pVoid во второй строке.

Ответы [ 2 ]

2 голосов
/ 24 апреля 2019

Скопировано непосредственно из стандартной библиотеки wiki :

Определено в stddef.h, locale.h, stdio.h, stdlib.h, string.h, time.h.

В стандарте C это может быть реализовано как:

#if !defined(NULL)
    #define NULL ((void*)0)
#endif

Итак, pVoid получит в точности то, что ему будет присвоено с NULL во второй строке.

Редактировать : как упомянуто @Jens Gustedt в комментариях, приятно отметить, что эта реализация NULL не уникальна и может зависеть от платформы.

1 голос
/ 25 апреля 2019

pVoid присваивается значение NULL. Это связано с тем, что выражение (void*)0 определяется как константа нулевого указателя .

Раздел 6.3.2.3p3 C стандарта гласит:

Целочисленное константное выражение со значением 0 или такое выражение, приведенное к типу void *, называется константой нулевого указателя , Если константа с нулевым указателем преобразуется в тип указателя, результирующий указатель, называемый нулевой указатель , гарантированно сравнивается не соответствует указателю на какой-либо объект или функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...