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]表示什么?为什么它里面不是三个数值,而是六个? 展开
{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]表示什么?为什么它里面不是三个数值,而是六个? 展开
4个回答
展开全部
st结构体由两个成员组成,即int型变量x与int*型变量y
数组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];
p = a 将数组的起始地址赋值给p,此时p指向了a数组的第一个元素,即a[0],
p->x表示“指针p指向的结构体的x成员”,也就是50,执行++操作就是51了
建议楼主学习一下C语言指针的基础知识
展开全部
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) ; (第一问)
完毕 ;
数组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) ; (第一问)
完毕 ;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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 个了.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
p->x == a[0]->x == 50 50 加1就是51了
p = a 那里表示指针p只想数组a的开头。,,数组A是一个结构体,每个包含两个元素,2*3 就是六个了。
st第一个元素是整数第二个是整数的指针所以复制的时候就需要一个整数一个指针50,&dt[0],&dt[0]表示去DT[0]的地址。
p = a 那里表示指针p只想数组a的开头。,,数组A是一个结构体,每个包含两个元素,2*3 就是六个了。
st第一个元素是整数第二个是整数的指针所以复制的时候就需要一个整数一个指针50,&dt[0],&dt[0]表示去DT[0]的地址。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询