C语言结构问题

LA_Lai 2012-10-09 09:59:37
下列程序的输出结果是( )。
struct LH
{ int n;struct LH *m;}p[4];
main()
{ int i;
for(i=0;i<2;i++)
{p[i].n=i;p[i].m=&p[i+1];}
p[i].m=p;
printf(“%d,%d\n”,(p[1].m)->n,p[2].m->n);
}
 A、0,1
 B、0,2
 C、0,0
 D、程序出错

为什么结果是C呢,求解答
...全文
116 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lp310018931 2012-10-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

p[1].m就是p[2],p[2]->n未赋值默认为0;
p[2].m就是p[0],p[0]->n被赋值为0。
[/Quote]
++
swordtan 2012-10-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

p[1].m就是p[2],p[2]->n未赋值默认为0;
p[2].m就是p[0],p[0]->n被赋值为0。
[/Quote]

全局和静态结构体变量,其所有值默认初始化为0。
fulin1992 2012-10-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

p[1].m就是p[2],p[2]->n未赋值默认为0;
p[2].m就是p[0],p[0]->n被赋值为0。
[/Quote]

我觉得很正确
记得要记得 2012-10-10
  • 打赏
  • 举报
回复
首先,这个数组的赋值是这样的:在循复制制的时候,,每一个数组含有一个数值和一个指针,这个指针指向下一个数组的地址。所以p[1].m是p[2]的地址,有因为在循环之后让p[2]的地址变成了数组的首地址,也就是p[0]的地址,那么在p[0]中存储的数值自然为0.所以打印的两个内容实际上都是打印p[2]处的数值。
L_chxu 2012-10-09
  • 打赏
  • 举报
回复
设置断点,调试一下,马上就知道了
lnjhh 2012-10-09
  • 打赏
  • 举报
回复
p[1].m就是p[2],p[2]->n未赋值默认为0;
p[2].m就是p[0],p[0]->n被赋值为0。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧