我正在阅读他们有这张照片的幻灯片:
int current = 0;
buffer[current]=0x00;
其中buffer只是一个字符数组char buffer[300];
如果0x00
表示null,我们将其替换为NULL buffer[current]=NULL
,在编译时会出现以下错误:
assignment makes integer from pointer without a cast
有人可以解释buffer[current]=0x00;
的含义吗?这会检查数组列表的结尾吗?
答案 0 :(得分:3)
NULL
是一个宏,它扩展为实现定义的空指针常量。
这两个定义对NULL都有效:
#define NULL 0
或
#define NULL ((void *) 0))
如果在编译器中使用后者:
char buffer[300];
buffer[current]=NULL;
您的程序无效,因为您无法将指针值分配给整数对象。
((void *) 0)
是指针类型的值。使用0
或等效的十六进制值0x00
将0
分配给整数对象。
答案 1 :(得分:1)
我认为assignment makes integer from pointer without a cast
是GCC中的编译器警告,NULL
几乎是为0x0定义的:
#define NULL 0
或
#define NULL (void *)0
所以在以后的情况下,如果你将NULL分配给整数而不是指针,你会在GCC中得到编译器警告。