2015-06-18 3 views
0

Я узнал, что все глобальные переменные будут инициализированы до '0'. В соответствии с этим, если мы объявляем нижнюю строку по всему миру,Статические глобальные указатели всегда инициализируются до NULL в C?

static char *pointer; 

Указатель должен быть равен NULL. Но всегда ли это так? Потому что в моем текущем проекте я инициализировал такой указатель. Но когда я сравнивал указатель == NULL, он становится ложным, и ему уже присвоено значение. Это какой-то нежелательный адрес?

+2

[да это будет] (http://stackoverflow.com/a/21964142/1708801) –

+0

Да, он всегда инициализирован 0. Пожалуйста, покажите свой полный код, если вы хотите объяснить последнюю часть своего вопроса , Я вполне уверен, что в вашем коде будет ошибка или неправильная интерпретация результатов. – kaylum

+1

по соглашению это будет, но это хорошая привычка устанавливать его в 0 или NULL по умолчанию, чтобы избежать путаницы, так как обычно забывать об этом и думать, что оно инициализировано каким-либо значением в этом адресе памяти и вызывает сомнения. – Dmitry

ответ

3

Все объекты с длительностью хранения static (глобальные или нет) будут неявно инициализированы до 0 или NULL, если не указан явный инициализатор.

Chapter and verse:

6.7.9 Initialization
...
10 Если объект, который имеет автоматическую продолжительность хранения не инициализирована явно, его значение является неопределенным. Если объект, который имеет статическую или длительность хранения потоков, не инициализируется явно, то:
- если у него есть тип указателя, он инициализируется нулевым указателем;
- если он имеет арифметический тип, он инициализируется (положительным или без знака) нулем;
- если он является агрегатом, каждый элемент инициализируется (рекурсивно) в соответствии с этими правилами, и любое заполнение инициализируется нулевыми битами;
- если это объединение, первый именованный элемент инициализируется (рекурсивно) в соответствии с этими правилами, и любое заполнение инициализируется нулевыми битами;
+1

, если они явно не инициализированы чем-то другим. –

Смежные вопросы