可能的重复:
C 中的 NULL 总是为零吗?
C 标准规定了以下内容calloc()
:
calloc 函数为 nmemb 对象数组分配空间,每个对象的大小都是 size。该空间被初始化为所有位为零。
以下关于所有位为零的警告:
请注意,这不必与浮点零或空指针常量的表示相同。
测试程序:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main()
{
char** list = calloc(10, sizeof(*list));
int i;
for (i = 0; i < 10; i++)
{
printf("%p is-null=%d\n", list[i], NULL == list[i]);
}
free(list);
return 0;
}
我使用以下编译器构建并执行了这个程序:
- VC7、VC8、VC9、VC10
- gcc v4.1.2, gcc v4.3.4
- 长处 5.8,长处 5.10
在所有情况下,所有零位都是一个NULL
指针(除非我在测试程序中犯了错误)。
NULL
C标准不保证指针全部为零的原因是什么?出于好奇,是否有所有位为零的编译器都不是NULL
指针?