while(*p)为什么等于while(*p!=‘\0’)

如下图,while(*p)为什么等于while(*p!=‘\0’)

img

就像if(a)和if(a==true)还有if(a!=0)是等价的一样
while(a)当a是真时一直循环,a是假时退出循环
那么a什么时候是假呢
如果是bool值当然true是真false是假
可是C是弱类型语言,各种值类型互相可以隐式转换
那么a是int型时0是假,非0是真
当a是char类型时,值就是它的ascii码,而'\0'的ascii码是0,其他都是非0

while( * p!='\0')的意思是 *p的值不是0,这个成立是while的逻辑表达式结果为真,能够继续循环
while(*p)中, *p就是循环的逻辑表达式,为真才能继续循环,为真的条件就是表达式结果不为0,翻译成代码那么也就是 *p !=0。这里 0和 '\0'是一样的

因为'\0'的ASCII码值就是0, 0为假,while(*p)等价于 while(*p != 0 ), 所以while(*p)等价于while(*p != '\0')

因为'\0'的意思是字符串的结束符,而这个结束符人为的定义就是0
while和if一样,他们判断的是括号里的表达式的逻辑值(真或假)
while( * p)当 * p==0时为假,非0时为真
所以这两个等价