c语言自增自减问题,以及输出函数赋值顺序

c语言自增自减问题,以及输出函数赋值顺序
int x=2,y=3;
printf("%d,\n",--x+y,--y+x);
为什么会输出3?

printf 的 参数是 从右往左依此入栈处理,输出 是按参数从左往右输出格式化字符串
所以 先处理 --y + x, 这里 不管这个值是多少,最终y 都是要减一的,所以y = 2
然后 处理 --x + y = 1 + 2 = 3,又因为 只有一个 %d,所以 结果就是 3,

不同编译器得到不同的结果,还是不纠结这种题。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7552225
  • 你也可以参考下这篇文章:【数据结构初阶】:带头双向循环链表(用C语言实现,附图详解)
  • 你还可以看下c语言参考手册中的 c语言-求值顺序与定序
  • 除此之外, 这篇博客: C语言结构体数组,结构体数组的定义,结构体数组的输出,结构体的应用中的 结构体数组的输出 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    #include<stdio.h> 
    typedef struct worker{
    	char id[10];
    	char name[10];
    	char sex[10];
    	int pay;
    }WOR;
    void main(){
    	WOR a[6]={
    		{"0001","陈文杰","男",1200},
    		{"0002","张三丰","女",5000},
    		{"0003","张四丰","女",1200}, 
    		{"0004","张五丰","男",2200},
    		{"0005","张六丰","男",5200},
    		{"0006","张七丰","男",6200} 
    	};
    	int i;
    	for(i=0;i<6;i++){
    		printf("%s,%s,%s,%d\n",a[i].id,a[i].name,a[i].sex,a[i].pay);
    	}
    }	
    

    在这里插入图片描述
    结构体对象中的a[i]就代表一个对象,它已经不再是一个值了
    所以我们应该用a[ii].成员名

    改进以上程序

    #include<stdio.h> 
    typedef struct worker{
    	char id[10];
    	char name[10];
    	char sex[10];
    	int pay;
    }WOR;
    void output(WOR a[],int n){//次函数是用来输出长度为n的工人数组的信息 
    	int i;
    	printf("工号\t姓名\t性别\t年龄\n"); 
    	for(i=0;i<6;i++){
    		printf("%s\t%s\t%s\t%d\n",a[i].id,a[i].name,a[i].sex,a[i].pay);
    	}
    }
    void main(){
    	WOR a[6]={
    		{"0001","陈文杰","男",1200},
    		{"0002","张三丰","女",5000},
    		{"0003","张四丰","女",1200}, 
    		{"0004","张五丰","男",2200},
    		{"0005","张六丰","男",5200},
    		{"0006","张七丰","男",6200} 
    	};
    	output(a,6);
    }
    

    在这里插入图片描述

  • 您还可以看一下 龙芯专家老师的龙芯生态应用开发基础:C语言精要课程中的 C指针定义小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    这段C语言代码的执行顺序和变量的赋值顺序如下:

    1. int x = 2;:声明一个整数变量x并将其初始化为2。
    2. int y = x++;:将x的值赋给y,然后x的值自增1。
    3. 此时,x的值为3,y的值为2。
    4. y += x++;:将x的值自增1后,加到y的值上,然后更新y的值。
    5. 此时,x的值为4,y的值为5。
    6. printf("%d\n", y);:打印y的值。
    7. 打印结果为3。

    最终输出结果为3的原因是: - y += x++; 这一行代码中,y的值是在x自增之前被赋值的,所以y的值是2。 - printf("%d\n", y); 打印的是y的值,所以输出结果为3。

    总结起来,这段代码中的输出结果为3是因为在赋值语句中先进行了自增操作,而打印语句中打印的是自增操作之前的值。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^