背景
今天刚和一个 C 人聊天,我们在以下问题上存在分歧:
int intgA[2] = { 1, 2 };
int intgB[2] = { 3, 5 };
int *intAPtr = intgA;
int *intBPtr = intgB;
所以当我们这样做时:
*intAPtr++ = *intBPtr++;
我的分析
First:
intBPtr
加一,现在指向地址 5。
然后,尊重,保持值5;
intAPtr
也加一,现在指向地址 2。
随后引用,值为2;
Lastly:
2 被 5 取代。
所以它们分别是:5和5。
他的分析
的价值*intBPtr
首先被分配给*intAPtr
first.
因此,它们变成:3和3。
然后两个*intAPtr
and *intBPtr
加一。
因此,它们分别变为:4 和 4。
我的假设
我以为++
运算符优先于两者*
and =
,因此我的断言。
例如,如果我们有:
*intAPtr++;
结果应该是2吧?因为我们首先递增指针,然后取消引用。
那么为什么在上述情况下,正如他所说,我们首先分配intBPtr
的值intAPtr
最后增加值?
在采纳了这里的所有建议之后,我在 IDE 中运行了代码,结果证实了 @sujin 的结果:
尽管它证实了我至少在优先级方面是正确的:
That: *intAPtr++ = *intBPtr++;
intAPtr++
具有更高的优先级,这会导致:intAPtr
将其地址加 1。
现在指向:2的地址。
同样:
intBPtr++
也加 1(地址)。
现在指向:5的地址。
然后就是*
's turn:
所以两者都被解引用(*)分别为 2 和 5。
But问题仍然存在,因为上面的分配(=
)似乎没有发生。
如果这样做的话,两者都会变成 5。
期待进一步的启发。