我对这段代码的执行方式感到困惑。假设我们有
int x=30,*y,*z;
y=&x;
*y++ 和++*y 有什么区别?还有这个程序的输出是什么?
#include<stdio.h>
int main(){
int x=30,*y,*z;
y=&x;
z=y;
*y++=*z++;
x++;
printf("%d %d %d ",x,y,z);
return 0;
}
最佳答案
表达式 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;
首先*y
会被赋值给temp
变量;因此 temp
分配了 30
,然后 y
的值递增 1,它开始指向 x
位置之后的下一个位置> (实际上没有变量存在)。
下一个案例:假设你的代码是:
int x = 30, *y;
int temp;
y = &x;
temp = ++*y; //this is same as *y = *y + 1; temp = *y;
*y
的第一个值从 30
递增到 31
然后将 31
分配给 temp
(注意: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
关于c - *y++ 和++*y 的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17978286/