一道C语言题目,不知为何答案是2,3.求过程
#include<stdio.h>unionks{inta;intb;};unionkss[4];unionks*p;main(){intn=1,i;for(i=0;i<...
#include<stdio.h>
union ks
{int a;
int b;
};
union ks s[4];
union ks *p;
main()
{int n=1,i;
for(i=0;i<4;i++)
{s[i].a=n;
s[i].b=s[i].a+1;
n=n+2;
}
p=&s[0];
printf("%d",p--->a);
printf("%d\n",++p--->a);
} 展开
union ks
{int a;
int b;
};
union ks s[4];
union ks *p;
main()
{int n=1,i;
for(i=0;i<4;i++)
{s[i].a=n;
s[i].b=s[i].a+1;
n=n+2;
}
p=&s[0];
printf("%d",p--->a);
printf("%d\n",++p--->a);
} 展开
展开全部
因为ks是联合体,他的成员共享一块内存,在for循环里总是先对s[i].a赋值,再给s[i].b赋值,这样s[i].b的值就是该内存地址上的值,不论是a和b取值都是s[i].a+1,所以s[4]={22,44,66,88},打印的时候,由于p=&s[0],这时p指向22,打印p->a就是2,在printf("%d\n",++p->a);时候,由于->的优先级大于++,所以先执行->得到2,再执行++2,由于是前++所以打印结果为3,综上打印结果为23
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
printf("%d",p--->a); //这句的意思是不是p->a?,这符号看着有点心虚
如果是这个意思的话。
共用体是公用同一块内存,这个你肯定知道,所以你对同一块内存中写入不同的值肯定是会覆盖之前写的值的, 这也是为什么你在for循环中给b赋值后将a原先的值覆盖的原因
如果是这个意思的话。
共用体是公用同一块内存,这个你肯定知道,所以你对同一块内存中写入不同的值肯定是会覆盖之前写的值的, 这也是为什么你在for循环中给b赋值后将a原先的值覆盖的原因
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询