指针递增问题在if...else里面。

问题描述 投票:0回答:1

作为一个相当复杂的函数的一部分,我写了这段代码。

if( (((int)*(pointer-11 ....  )   //It is too long and complex
{
    *(pointer++)=*(pointer-12)+1;
}
else
{
    *(pointer++)=*(pointer-12);
}

if部分很好用,但是 else部分的工作原理是:

*(pointer++)=*(pointer-11);

当我把增量代码和实际行分开时... ..,

if( .... )
{
    *(pointer)=*(pointer-12)+1;
}
else
{
    *(pointer)=*(pointer-12);
}
pointer++;

它能完美地工作。但是上面的代码应该也能用吧?有什么想法吗?

c pointers
1个回答
3
投票

*(pointer++)=*(pointer-12); 是未定义的行为。这里没有序列点,所以你不知道是左边还是右边的部分。= 将首先被评估。

由于它是未定义的行为,编译器可能会做任何事情,但这些都是相当合理的解释。

// Left gets evaluated first    
*(pointer)=*((pointer+1)-12);
pointer++;

// Right gets evaluated first
*(pointer)=*(pointer-12);
pointer++;

注意,这与指针无关。表达式 x++ <op> x 导致未定义的行为,而不管是什么类型的 x 有什么运营商 <op> 是。(这也许不是百分之百的正确,但无论如何你最好避免这些表达方式)

© www.soinside.com 2019 - 2024. All rights reserved.