C++ 我能';我不明白这个函数是如何工作的

C++ 我能';我不明白这个函数是如何工作的,c++,function,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); r

我有这个程序,我很难理解这个函数是如何工作的,为什么它会这样做。我认为这与操作优先级有关,但我不是很确定。谁能分步向我解释一下这是如何编译的

计划如下:

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


非常感谢。

正如larsmans所说,在某种情况下不应使用双增量,但输出是正常的:

i=0 i=2 等等


这解释了在调用函数
s1(a,b)
后,您的输出是1b3d5f…

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
保持不变

此函数偶然工作。在一条语句中执行
i++
两次是不可靠的。你在哪里找到这块积垢的?这是我在大学的任务,我要弄清楚这个函数输出的是什么。@larsmans对我来说,这不是一个偶然的问题,在每个循环中,它都用源替换目标,但增加22@Samoth赋值的操作顺序
dest[i++]=src[i++]
未在标准中指定。正确答案是无法确定输出,因为代码具有未定义的行为。请参阅@larsman的链接。如果你的教授不接受你的答案,让他看看。这个答案是错误的——行
while(dest[i++]=src[i++])具有未定义的行为。另外,要查看GCC在OP代码中发出的警告,这个答案是错误的-行
while(dest[i++]=src[i++])具有未定义的行为。另外,要查看GCC在OP代码中发出的警告。
{
dest[2] = src[2]; // src[2] is 3
i = i + 2; // i++ and i ++
}
dest = "abcdef"
src = "123456"