我不明白这个函数是如何工作的

I can't understand how this function works

本文关键字:何工作 工作 明白 函数      更新时间:2023-10-16

我有这个程序,我很难确切地理解这个函数是如何工作的,以及它为什么要做它所做的事情。我认为这与操作优先级有关,但我不太确定。谁能分步向我解释这是如何编译的?

程序是这样的:

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;
}

输出为:1B3D5楼123456

多谢。

正如 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...

调用函数后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保持不变