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,
不同编译器得到不同的结果,还是不纠结这种题。
不知道你这个问题是否已经解决, 如果还没有解决的话:#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语言代码的执行顺序和变量的赋值顺序如下:
int x = 2;
:声明一个整数变量x
并将其初始化为2。int y = x++;
:将x
的值赋给y
,然后x
的值自增1。x
的值为3,y
的值为2。y += x++;
:将x
的值自增1后,加到y
的值上,然后更新y
的值。x
的值为4,y
的值为5。printf("%d\n", y);
:打印y
的值。最终输出结果为3的原因是: - y += x++;
这一行代码中,y
的值是在x
自增之前被赋值的,所以y
的值是2。 - printf("%d\n", y);
打印的是y
的值,所以输出结果为3。
总结起来,这段代码中的输出结果为3是因为在赋值语句中先进行了自增操作,而打印语句中打印的是自增操作之前的值。