C语言中赋值语句用于判断条件
上午在看C语言课程的时候,老师讲到了指针作为函数参数来实现字符串的
copy()
函数,然后使用for循环的时候提出了如下变式。
void copy_str24(char* from, char* to)
{
while ((*to++ = *from++) != '\0'){}
return;
}
也就是不断从from中取值然后赋值给to,直到赋值为\0
的时候才停止,但是这个时候其实to中已经得到了from中的最后一位中的\0
,因为C语言没有字符串这种数据类型,只能使用以\0
结尾的字符数组作为字符串,而不以\0
结尾的字符数组并不是字符串。
接下来,老师提出了新的变式:
void copy_str25(char* from, char* to)
{
while ((*to++ = *from++)){}
return;
}
这里是直接去掉了判断是否为\0
的操作,那么这里如何理解呢?
实际上我这里还是偷懒了,因为这个疑问应该在上一个函数就提出来了。
那么,赋值语句作为判断条件是什么意思呢?它并不是以是否赋值成功作为true
和false
的判断机制,而是看赋值的值是多少,如果为0
自动就作为false
了
然后接下来我就进行了测试,当把数字0
放到if
中判断的话确实判断为false
但是字符'0'
呢?
可以看到它是true
的,其实在c语言中除了false 和 0 之外基本上都是true
字符数组中如果分配的空间多余字符的数目,后面是用0填充的,通过验证可以知道这里是数字0而不是字符0