字符串拷贝操作test1
void test1(char *s, char *t)
{
while((*s++ = *t++) != '\0')
;
}
void test2(char *s, char *t)
{
while((*(s++) = *(t++)) != '\0')
;
}
01 这两个函数都可以完成操作,但是test2中(s++)和(t++)为什么没有在 (*s = *t) 之前执行?(如果在赋值之前执行应该第一个字符无法被复制才对吧)
02 网上有对test1做出解释
void test3(char *s, char *t)
{
while(*t != 0)
{
*s = *t;
s++;
t++;
}
}
为什么是先判断 (t != 0) 之后,再进行赋值操作,再进行自增运算 (不是先赋值再判断s的值是否等于0?)
03 自己理解的test1执行顺序,这样理解是否正确
void test4(char *s, char *t)
{
while(1)
{
*s = *t;
s++;
t++;
if(*s != 0)
break;
}
}
谢邀
01 参考我的这个回答 C语言中*s++ = *t++ 是怎么一种赋值过程
02 这个不完全等效,你的理解是对的
03 你的这个写法也是不对的,你给出的逻辑是
s++
之后再判断*s == 0
(你原文写的!=
应该是写错了),这与原代码逻辑不同