C++中数组地址指针是常量
最近在编程C++是遇到一个warming,内容为:数组地址 == NULL,恒为假
我蛮疑惑的,因为我理解中,一个地址指向NULL是很平常的事情。
C++的中NULL
在C语言与C++中,对于NULL,其实是不同的,
1 | #ifndef NULL |
可以看出来,C语言中,NULL是指向地址0,而在C++中,NULL指向数字0
所以,我们常常在释放指针变量之后,将其赋予NULL,
1 | int *a = (int)malloc(sizeof(int)); |
其本质就是该指针指向地址0。
C++的数组
C++的数据,本质就是在一个整体内存空间存储一定数据的数据结构;而与之对应的链表,是在随机分散的内存空间存储数据的数据结构。
而其数据名,就是指向该数组的头指针。
1 | int a[5] = {0}; |
以上代码的最终结果,会输出True
那么作为一个固定内存空间内的数据存储结构,其地址应当是固定的,结果也确实如此。
1 | int a[5] = {0}; |
该代码会提示错误,显示左侧应该为一个变量。
而实际上,数组名所代表的地址,就是一个常量,在初始化之后就不能再变更。
解释原因
因此,当在初始化数组之前,肯定不能使为初始化的数据地址与NULL进行比较
而,当数组被初始化之后,其数组名,数组指针就已经是个不等于0的常量
故此,数组地址 == NULL,恒为假。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 智未开笔记!