C 语言中0有几个用途。它是一个数字量;在字符串中它是一个结束符(’\0’),它是地
址指针所允许的最小值;在逻辑表达式中它表示假,因为它有这么多的用途,你在编程时要清
楚地表明是哪种。
C++ Prime P113--115
#include <iostream>
#include <string>
using namespace std;
void main()
{
char *cp = "hel0lo"; // l与l之间有个数字0,但是它表示的是字符'0',而非数字本身.
// 字符串末尾的结束符null 本身就是个数字0,而非字符'0'
// 因为结束符null 是数字0,因此可以用于逻辑判断
// while ( *cp != NULL )
// while(*cp !=0)
// while(*cp!='\0')
while(*cp) // 这种写法最简单,必须理解.
{
cout<<*cp<<endl;
++cp;
}
cout<<"------------------------"<<endl;
cout<<*cp<<endl; // 输出为空 此时 cp指向空字符 '\0' ,什么也没有
cout<<"------------------------"<<endl;
string s = "hel0lo";
string::size_type i =0;
while(i!=s.size())
{
cout<<s[i]<<endl;
++i;
}
while(!('\0')){ // '\0' ---- 它不是一个字符,它是数字0,因此可以用着逻辑判断
cout<<"null terminal"<<endl;
break;
}
cout<<'\0'<<endl; // 输出为空 '\0' ,什么也没有
}
下文转摘:
http://blog.youkuaiyun.com/chenliangming/article/details/3261149
17.1.7 C语言中与0比较的用法
C 语言中0有几个用途。它是一个数字量;在字符串中它是一个结束符(’\0’),它是地
址指针所允许的最小值;在逻辑表达式中它表示假,因为它有这么多的用途,你在编程时要清
楚地表明是哪种。
隐含地和逻律变量比较。正如前面提到,这样写逻辑表达式是正确的。
while(!Done)
这个表达式隐含在和0 作比较是正确的,因为这个比较是在一个逻辑表达式里。
数与0 比较。虽然可隐含地把逻辑表达式与0 比较,你却不可以把数字表达式隐含地与0
比较。对于数字,编程:
while(Balance!=0)…
而不可写成
while(Balance)…
把字符与结束符(’/0’)字一样,字符也不是逻辑表达式。因此对字符编程:
while(* CharPtr!=’0’)…
而不能写成:
while (* CharPtr) …
这种说法与常用的c 语言在处理字符数据时的习惯可能有出入,但它强化了这种观点,即
表达式是在处理字符数据,而非逻辑数据。C语言的有些用法并不是基于可读性和或维护而设计
的,比如上例即是。
把指针与Null(空指针)比较。对指针编程:
while(BufferPtr!=Null)…
而不写成:
while(BufferPtr)…
与字符的情形一样,这也不是C 的常用用法,但却增强可读性。