GMa*_*ckG 20
字符串文字是一个字符数组*(带有静态存储),它包含文字中的所有字符以及终止符.数组的大小是元素的大小乘以数组中元素的数量.
文字""是一个由char值组成的数组0.类型是char[1],并且sizeof(char)始终是一个; 因此sizeof(char[1])永远是一个.
在C中,NULL是实现定义的,并且经常是((void*)0).的大小void*,您的具体实现,是4.这可能是因您运行的平台上不同的数字.NULL也可以扩展为某种类型的值为0的整数,并且您将获得其大小.
*文字不是指针,数组不是指针,指针在这部分问题中不起作用.
Ada*_*eld 12
空字符串""具有类型char[1]或"数组1 char".正如大多数人所认为的那样,它不是指针.它可以衰减成一个指针,所以每当指向一个指针时char,你可以使用一个数组char代替,并且数组将衰减为指向其第一个元素的指针.
由于sizeof(char)是1(根据定义),因此我们有sizeof("")是sizeof(char[1]),为1×1 = 1.
在C中,NULL是"实现定义的空指针常量"(C99§7.17.3)."空指针常量"被定义为值为0的整数表达式,或者这样的表达式转换为类型void *(C99§6.3.2.3.3).所以实际sizeof(NULL)定义的实际值是:你可能会得到sizeof(int),或者你可能得到sizeof(void*).在64位系统上,你经常sizeof(int) == 4和sizeof(void*) == 8,这意味着你不能依靠什么sizeof(NULL)是.
另请注意,大多数C实现定义NULL为((void*)0)(虽然这不是标准所要求的),而大多数C++实现只是定义NULL为普通0. 这意味着sizeof(NULL)can 的值将根据代码是编译为C还是C++而变化(例如,C和C++源文件之间共享的头文件中的代码).所以不要依赖sizeof(NULL).
C中的NULL定义为(void*)0.由于它是一个指针,因此需要4个字节来存储它.并且,""是1个字节,因为"空"字符串具有EOL字符('\ 0').