表达方式x = *y++
效果与以下相同:
x = *y;
y = y + 1;
如果表达式只是*y++;
(没有分配)那么它只不过是相同的y++;
, 那是y
增量后开始指向下一个位置。
第二个表达++*y
意思是增加指向的值y
与以下相同:*y = *y + 1;
(指针不递增)
回答你的第一个问题会更清楚:
假设你的代码是:
int x = 30, *y;
int temp;
y = &x;
temp = *y++; //this is same as: temp = *y; y = y + 1;
First *y
将被分配给temp
多变的;因此temp
分配的30
,则值为y
增加一,它开始指向位置后的下一个位置x
(实际上不存在变量)。
下一种情况:假设您的代码是:
int x = 30, *y;
int temp;
y = &x;
temp = ++*y; //this is same as *y = *y + 1; temp = *y;
第一个值*y
增量从30
to 31
进而31
被分配给temp
(note: x
就是现在31
).
你的问题的下一部分(阅读评论):
int x = 30, *y, *z;
y = &x; // y ---> x , y points to x
z = y; // z ---> x , z points to x
*y++ = *z++; // *y = *z, y++, z++ , that is
// x = x, y++, z++
x++; // increment x to 31