今天遇到一个以前都没注意过的问题,如下程序:
const char *cp = "some value";
while (*cp) {
// do something to *cp
++cp;
}
当*cp指向'\0',一直搞不清,为什么此时程序会停止。在此之前,我一直认为'\0'就是空格。因为有用程序测试过'\0',输出结果是个空格。所以开始查资料,发现自己原来的想法错了
'\0'的ASCII码为0,在C++又叫null character, 输出结果是一个类似空格的,没有信息.但不是空格;
于是测试如下:
char a='\0';
cout<<(int)a< if(a==0)
cout<<"a值为0"< if(a==' ')
cout<<"a是空格"< cout<<"*"<总算找到答案了,while('\0')相当于while(0)(作为条件语句的表达式会自动转换成bool型)...,
而NULL就比较没什么问题了,直接用VS (go to definition)就可以看到了结果了,就是0,(void*)0;所以当int *p=0时,即初始一个空对象时,0强制转换为(int*) 0
所以C++程序员更习惯用0来初始化一个指针变量,而不是像C程序员用NULL。