对于我目前正在处理的程序,我使用的代码包含此操作:
*(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++
时,有人可以向我解释为什么代码会这样表现吗?
答案 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