Стандарт C гарантирует, что глобальные и статические переменные, если они не инициализированы, всегда 0
.
Здесь мой вопрос: неинициализированные глобальные и статические переменные переходят в сегмент BSS
в программе. Итак, так называемый 0
должен быть all-bit 0
.
Для интегральных переменных all-bit 0
будет оцениваться как 0
. Переменные с плавающей запятой, если следующий IEEE 754, также 0.0
. Но для указателей нулевые указатели необязательно должны быть all-bit 0
, поэтому инициализация глобального указателя выглядит так:
int* p = NULL;
имеет значение только:
int *p;