C语言结构体题目

structst{intx;int*y;}*p;intdt[3]={10,20,30};structsta[3]={50,&dt[0],60,&dt[0],70,&dt[... struct st
{int x;int*y;}*p;
int dt[3]={10,20,30};
struct st a[3]={50,&dt[0],60,&dt[0],70,&dt[0]};
main()
{p=a;
printf(“%d\n”,++(p->x));
}
运行结果是51 怎么得出来的?
最后指针p指向x是什么意思,数组a[3]里面的&dt[0]表示什么?为什么它里面不是三个数值,而是六个?
展开
 我来答
王囧囧1988
2013-07-10 · TA获得超过132个赞
知道小有建树答主
回答量:85
采纳率:0%
帮助的人:110万
展开全部
  1. st结构体由两个成员组成,即int型变量x与int*型变量y

  2. 数组a有3个元素构成,每个元素均为st类型;因此,对于a的初始化可以像题目中那么写,依次为3个元素的6个成员赋值,等价于:

    a[0].x = 50; a[0].y = &dt[0];

    a[1].x = 60; a[1].y = &dt[0];

    a[2].x = 70; a[2].y = &dt[0];

  3. p = a 将数组的起始地址赋值给p,此时p指向了a数组的第一个元素,即a[0],

    p->x表示“指针p指向的结构体的x成员”,也就是50,执行++操作就是51了

    建议楼主学习一下C语言指针的基础知识

1799697736
2013-07-10 · 超过22用户采纳过TA的回答
知道答主
回答量:47
采纳率:0%
帮助的人:55万
展开全部
p 为结构 st 的指针 ;
数组a[3]为结构 st 的数组 ,既有3个st, 每个结构 st 里有2个元素,所以有6个数值(第三问);

a为数组a[3]第一个元素a[0]的地址 ;
p=a,将数组a的地址赋值给p,

p指向a[0] ;
(p->x),即为a[0].x (楼主学结构应该知道 “.” )

&dt[0]指取dt[0] 的地址

(第二问);

a[0].x在第四行初始为50

(p->x),即为a[0].x
++(p->x),为51 ;

printf("%d \n", ++(p->x) ); 等价于printf("%d \n", 51) ; (第一问)

完毕 ;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ayktx
2013-07-10 · TA获得超过668个赞
知道小有建树答主
回答量:946
采纳率:33%
帮助的人:413万
展开全部

p 是 struct st 类型的指针,

p->x 是结构体指针成员运算符, 就是结构休里面的x

struct st a[3]={50,&dt[0],60,&dt[0],70,&dt[0]};

是初始化结构体, y 是int指针, &dt[0] 是数组  dt 里面第0个元素的地址, 就是让 y 指向 dt[0] 的地址

是6个值是因为每个结构体变量有2个成员, 所以3 * 2 = 6 个了.

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友f8fb8dba8
2013-07-10
知道答主
回答量:5
采纳率:0%
帮助的人:7712
展开全部
p->x == a[0]->x == 50 50 加1就是51了
p = a 那里表示指针p只想数组a的开头。,,数组A是一个结构体,每个包含两个元素,2*3 就是六个了。
st第一个元素是整数第二个是整数的指针所以复制的时候就需要一个整数一个指针50,&dt[0],&dt[0]表示去DT[0]的地址。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式