将增量运算符与指针解除引用相结合时出现意外行为

时间:2015-05-01 15:18:55

标签: c pointers increment

对于我目前正在处理的程序,我使用的代码包含此操作:

 *(a+++5) = 5; //increments a and adds 5 to it, then dereference that address

这表现得出乎意料。值5似乎存储在位置(a + 4)中,这很奇怪,因为没有任何东西正在向后移动指针。我发现原因是a++

*(a++) = 5;
printf("%d\n" *(a-1)); //outputs 5

使用++a代替a++会产生更合理的结果:

*(++a) = 5;
printf("%d\n" *a); //outputs 5

当我使用a++时,有人可以向我解释为什么代码会这样表现吗?

2 个答案:

答案 0 :(得分:0)

操作顺序示例:

b = 5 + a++; // same as:   b = 5 + a;   a = a + 1;

b = 5 + ++a; // same as:   a = a + 1;   b = 5 + a;

为什么?...因为:

a++ // adds after the line command.

++a // adds before th line command. 

希望它有所帮助。

答案 1 :(得分:0)

*(a +++ 5)= 5这样做

 *(a+5)=5 //so a[5]=5
 a=a+1 //that gives a[4]=5

同样*(a ++)= 5:

 *a=5 //so a[0]=5
 a=a+1//incrementation on address => a[-1]=5
 //*a=content at address "a" and a is an address that you incremented