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