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

标签 c pointers pointer-arithmetic

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

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/

相关文章:

python - 我的python客户端向c服务器发送一个整数,但服务器收到0

pointers - 局部变量的返回地址产生意外值

c - void * 赋值问题

c - 数组和指针算术~需要澄清

java - 在 JAVA GUI 和 C++ 服务器之间实现 SSL

c++ - c(linux)中的函数问题

c - sscanf 用于单独的字符串(超过 2 个字符串)

c - 这个代码片段具体做了什么?

关于多维数组和指针的概念问题

c - 存储指针的整数差异?