有以下定义的链表struct st{int n,struct st *next;}a[3]={5,&a[1],7,&a[2],9,NULL}, *p=&a;值为7的表达

Ap->nB(p->n)++C(++p)->nDp->next->n教科书答案是D解释以下谢谢注意*p=&a这样哪有答案啊让我头疼啊不是应该*p=&a[0]才是D嘛... A p->n B(p->n)++ C (++p)->n D p->next->n
教科书答案是D解释以下谢谢
注意*p=&a 这样哪有答案啊让我头疼啊不是应该*p=&a[0]才是D嘛
展开
 我来答
鼻行动物
2012-12-20 · TA获得超过100个赞
知道答主
回答量:65
采纳率:0%
帮助的人:51.3万
展开全部
typedef struct _st{
int n;
struct st *next;
}st;
st a[3]={5,&a[1],7,&a[2],9,NULL};//初始化a[3]这个结构体数组, a[0] 的值为 a[0].n=5;a[0].next=&a[1];(也就是说a[0]后一个元素为a[1]),同理,a[1]的n为7,指向a[2];a[2]的n为9,后一个元素为空;

st *p=&a;
现在p的值为结构体数组首地址,也就是说是 p = &a[0]; p->next->n也就是a[1].n,为7。
更多追问追答
追问
按你的说法就是说*p=&a等价于p=&a[0]
我不能接受
a=&a[0],a是a[0]的地址啊,再用取地址符号&来&a,就是地址的地址了
追答
char *p = a;
等价于
char *p = &a[0];

char *p = &a;
不知道你能不能理解。不过你倒是可以自己写一下试试。

char b[100][100];
printf("b:%p sizeof(b):%d &b:%p sizeof(&b):%d\n",sizeof(b),sizeof(&b));
输出结果:

b:0x7fff88e60930 sizeof(b):10000 &b:0x7fff88e60930 sizeof(&b):8

地址是一样的,只不过b的类型是int[][],而&b仅仅是一个指向int[][]的指针。

typedef struct _st{
int n;
struct st *next;
}st;
st a[3]={5,&a[1],7,&a[2],9,NULL};
st *x = &a;

我都给你改对了,百分百可以运行,竟然采纳错误答案

另外a本身就是st*,则&a就是st**,p却是st*,所以不能赋给p

我表示很无奈??
你完全可以自己写两句来试试
来自:求助得到的回答
格林大人
2018-07-07
知道答主
回答量:7
采纳率:0%
帮助的人:5215
展开全部
c为什么不对?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
希伯来爵
2012-12-20 · TA获得超过611个赞
知道答主
回答量:187
采纳率:100%
帮助的人:71.7万
展开全部
是题目错了,你的代码我根本不能编译
首先
int n,struct st *next;
这里中间应该是分号而不是逗号
另外a本身就是st*,则&a就是st**,p却是st*,所以不能赋给p

应该改成*p=a
追问
好吧我比较同意你的说法但楼下有个跟你不同的我还是不知道怎么办教科书会有错题吗
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式