有以下程序段:
struct st
{int x; int *y;}*pt;
int a[]={1,2},b[]={3.4};
struct st c[2]={10,a,20,b};
pt=c;
以下选项中表达式的值为1的是( )
A.*pt->y B.pt->x C.++pt->x D.(pt++)->x
正确的答案是A,可是我看不懂这程序,还有这几个选项,也不理解,能帮我详细地讲解一下这程序和这几个选项吗?谢谢!
C语言关于指针和结构体的小问题
答案:5 悬赏:70 手机版
解决时间 2021-03-16 06:13
- 提问者网友:寂寞梧桐
- 2021-03-15 22:16
最佳答案
- 五星知识达人网友:煞尾
- 2021-03-15 23:11
struct st
{int x; int *y;}*pt;//struct st * 的变量pt。int *y是int类型的指针y。
int a[]={1,2},b[]={3.4};//两个数组。
struct st c[2]={10,a,20,b};初始化了两个结构体c[0]={10,a}和c[1]={20,b}。其中c[0]={10,a}等价于
c[0]->x=10;c[0]->y=a;(c[0]->y=&a[0];)
pt=c;//pt指向了结构体数组的第一个元素。
答案解析:
A. *pt->y == *(pt->y): pt->y==c[0]->y==a; *(pt->y)==*(a)==a[0]=1;
B. pt->x == pt->x== c[0]->x==10;
C. ++pt->x == ++(pt->x) ==++10=11;(这里的自加是对结构体中的变量的自加)
D.(pt++)->x == (pt->x; pt++;);(嗯 这样子了明白了吗)
以上。
{int x; int *y;}*pt;//struct st * 的变量pt。int *y是int类型的指针y。
int a[]={1,2},b[]={3.4};//两个数组。
struct st c[2]={10,a,20,b};初始化了两个结构体c[0]={10,a}和c[1]={20,b}。其中c[0]={10,a}等价于
c[0]->x=10;c[0]->y=a;(c[0]->y=&a[0];)
pt=c;//pt指向了结构体数组的第一个元素。
答案解析:
A. *pt->y == *(pt->y): pt->y==c[0]->y==a; *(pt->y)==*(a)==a[0]=1;
B. pt->x == pt->x== c[0]->x==10;
C. ++pt->x == ++(pt->x) ==++10=11;(这里的自加是对结构体中的变量的自加)
D.(pt++)->x == (pt->x; pt++;);(嗯 这样子了明白了吗)
以上。
全部回答
- 1楼网友:思契十里
- 2021-03-16 03:29
问老师去
- 2楼网友:山有枢
- 2021-03-16 02:07
printf(" %num:%d,name:%s,sex:%s,age:%d \n", stu_1.num , stu_1.name , stu_1.sex , stu_1.age ) ; sex是个字符 你用了%s printf(" %num:%d,name:%s,sex:%c,age:%d \n", stu_1.num , stu_1.name , stu_1.sex , stu_1.age ) ;
- 3楼网友:从此江山别
- 2021-03-16 00:51
我看 yehuaw回答已经非常详细了。我只是说说学习的建议吧。题目看不懂没关系,不明白每个变量是什么意思也没有关系,因为你毕竟仅仅是拿眼去看。你可以把这些代码敲到VS环境中,单步调试,为每个变量添加监视,看看每个变量到底是地址的值还是数值。在程序的调试中去理解,一开始可能比较吃力,不过坚持一段时间,肯定有大的收获。
- 4楼网友:山君与见山
- 2021-03-16 00:05
int a[]=;可以理解为定义了一个指针,指针指向的第一个地址装的1,第二个地址装的2.
b依次类推
结构体st中有两成员,一个为x一个为*y。
c为st型的结构体数组,分别是c[0],c[1]。
c[0]中有两个成员:c[0].x = 10;c[0].y = a;
pt指向c[0];
分析答案:
显然为1的是a[0];我们只需要找出a[0是那个就可以了。
c[0].y就是a;
pt为指向c[0]的指针。所以答案应该是*pt->y
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯