gpt4 book ai didi

c - *y++ 和++*y 的区别?

转载 作者:太空狗 更新时间:2023-10-29 14:49:31 24 4
gpt4 key购买 nike

我对这段代码的执行方式感到困惑。假设我们有

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com