今天刷题,遇到一个很模棱两可的问题:一个指向空字符串的指针与赋值为NULL的指针有区别吗?
现通过程序来检验一下这两者的区别:
#include <iostream>
using namespace std;
int main()
{
char *p, *q;
p = NULL;
q = "";
if(q == p)
cout << "Hello world!" << endl;
else
cout << "bad!"<<endl;
return 0;
}
输出的结果为:bad!。这通过程序调试很容易理解,程序会为每个初始化的指针赋值。下面是我在自己的机器上调试的情况:
可以看到指针p指向的地址为0x0,而q指向的的地址是0x403064。两个指针的值明显是不同的,而且通过测试可知,所有指向NULL的指针的值都是为0x0,这里q虽然是指向空串,但是程序还是为空串分配了内存地址。