2015-05-08 2 views
-5

NULL - макрос, определенный в <stddef.h> для null pointer; его можно определить как ((void*)0). NULL - это имя первого символа в наборе символов ASCII. В чем разница между ними?В чем разница между NUL и NULL?

+3

В чем Ваш вопрос? – chqrlie

+0

Перед тем, как ответить, обратитесь к [this] (http://meta.stackoverflow.com/q/293634/2173917). –

+0

Почему это обозначено как дубликат? Возможно, этот вопрос был плохо написан, но это не дубликат. Другая нить не имеет в заголовке 'NUL'. – Bilow

ответ

1

NULL и NUL имеют одинаковую концепцию: оба они представляют собой отсутствие значения. Единственное различие - как вы сказали - NULL - это макрос, тогда как NUL - это имя, присвоенное первому символу ASCII. Единственный сценарий, вы, вероятно, столкнутся макрос называется NUL-то вроде этого:

#define NUL '\0' 
+1

Если вы это сделаете, это может выглядеть так: '#define NUL '\ 0'' – chqrlie

+0

@chqrlie: Хорошая точка. Соответствующие изменения сделаны – Levi

0

Обратите внимание, что 0, NULL, '\0' и L'\0' несколько отличается:

sizeof(NULL) таким же, как sizeof(void*), который обычно составляет 8 на 64-битных системах Intel.

sizeof(0) - это то же самое, что и sizeof(int), что обычно является 4 на общих 64-битных системах Intel.

sizeof('\0') также же, как и в sizeof(int)C, но так же, как sizeof(char) в C++, который имеет значение 1 по определению, и является, скорее всего, отличается от sizeof(int).

sizeof(L'\0') - это то же, что и sizeof(wchar_t).

Удивительно, но в C, вы можете иметь sizeof(L'\0') < sizeof('\0')

+0

В C++ символ 'char' никогда не будет иметь тот же размер, что и' int', потому что 'char' всегда 1 байт, а 'int' всегда не менее 2 байтов. – Oli

+0

Это имеет смысл, поскольку C++ должен иметь возможность различать символы 'char' и' int', но даже в системах, где 'sizeof (int) == 1',' int' и 'char' являются различными типами в' C', так почему это дополнительное ограничение? – chqrlie

2

Там нет такого термина, как NUL в C стандарта. В C Standard там используются следующие термины

null character (\0) 
NULL macro 
null pointer 
null pointer constant 
null preprocessing directive 
null statement 
null wide character 

Например

... Байт со всеми битами, установленными в 0, называется нулевой символ, должен существовать в основной набор символов исполнения; он используется для завершения символьной строки .

Или

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

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