我有这个程序,我很难理解这个功能是如何工作的,为什么它会做它的功能。我认为它与操作优先级有关,但我不太确定。任何人都可以通过步骤向我解释这是如何编译的?
该计划是这样的:
void s1( char dest[], char src[] )
{ int i = 0;
while( dest[i++] = src[i++] );
}
int main()
{
char a[100]="abcdef";
char b[100]="123456";
s1(a,b);
puts(a);
puts(b);
return 0;
}
输出是: 1b3d5f 123456
非常感谢。
答案 0 :(得分:-1)
正如larsmans所说,你不应该在条件中使用双增量,但输出是正常的:
{
dest[0] = src[0]; // src[0] is 1
i = i + 2; // i++ and i ++
}
{
dest[2] = src[2]; // src[2] is 3
i = i + 2; // i++ and i ++
}
等等......
哪个解释你的输出是1b3d5f ......
答案 1 :(得分:-2)
在调用函数s1(a, b)
之后......
dest = "abcdef"
src = "123456"
i++
是i的后增量...即:使用i的当前值,然后递增
因此,在第一次运行while循环时,使用i = 0
...
因此,dest[0] = src[0] = 1
......
现在我增加了两次,因为循环中有两个i ++ ...
现在i = 2
因此dest[2] = src[2] = 3
等......
最后dest = 1b3d5f
和src
保持不变