我无法理解这个功能是如何工作的

时间:2014-01-11 13:15:33

标签: c++ function

我有这个程序,我很难理解这个功能是如何工作的,为什么它会做它的功能。我认为它与操作优先级有关,但我不太确定。任何人都可以通过步骤向我解释这是如何编译的?

该计划是这样的:

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

非常感谢。

2 个答案:

答案 0 :(得分:-1)

正如larsmans所说,你不应该在条件中使用双增量,但输出是正常的:

i = 0

{
dest[0] = src[0]; // src[0] is 1
i = i + 2; // i++ and i ++
}

i = 2

{
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 = 1b3d5fsrc保持不变