赋值和条件看似是C语言中毫不相关的两个概念,虽然实际过程中我猜测不会有太多这种不太符合常理的情况出现,但是现在在学习的过程中,为了出题而出题总是会整出一些花活出来.....这很难不让人联想起高中时一些大佬为了彰显自己的数学天赋而自己手动捏造出一些奇了吧怪的导数题来恶心人,俗称钓鱼卷......不过不管怎样,特算是补起了自己的一个知识盲区,一起来看看吧~
void sstrcat(char *s, char *t)
{
int n;
n=strlen(s);
while(*(s+n)=*t){
s++; t++;
}
}
上面这个函数是一个要求自己手搓一个strcat函数,即字符串连接函数,我们来看while循环里面的这个语句
while(*(s+n)=*t)
这显然是一个赋值语句,可是按理来说应该是一个条件判断语句的,然而程序也是正确的,只能说明这个赋值语句是可以当作有真值的语句的。
文心一言出场~~
也就是说,赋值语句作为一个判断语句的时候,返回值是被赋予的那个值。
回到本例中,那么该*(s+n)=*t语句就应该返回的是右边的*t这个字符的值,当它到达字符串结尾的时候为零,此时停止。
感觉这个方法其实很巧妙地进行了终止判断,不需要再写一个额外的语句来判断后面的字符串是否已经到达末尾。但是不建议在自己写的时候这么写,确实容易看不懂,其实也就是大佬们秀一把自己的语法功底啦~