C语言链表练习题

AC_YE 2020-06-10 08:36:53
为什么这题选c 不选d,还有为什么题目*p=&a,a是数组名,他本身不就是地址了吗,为什么好要用取地址符&
...全文
363 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2020-06-11
  • 打赏
  • 举报
回复
理论上来说
*p = &a; 是不合法的,指针类型不同应该会报错或警告的。如果 &a 被强行转化为 struct st *,即p是struct st *类型,那么 C 和 D 都对;如果 &a 没有被强行转化为 struct st *,即p不是struct st *类型,而是struct st (*)[3]类型,那么 C 和 D 都错。&a是 (*)[3] 指针类型,该指针类型是不会有next,即 (&a)->next 是错的,但是 ((struct st*)&a)->next 可以,也就是指针类型不同,成员也不同。
所以这道题没意义

自信男孩 2020-06-11
  • 打赏
  • 举报
回复
注意struct st *p = &a;
此时虽然p指向的地址和a的地址是一样的。但是++p和a+1类型不是一样的,p指向的是(*)[3]的类型,因此++p偏移了3 * sizeof(struct st);而不是偏移1 * sizeof(struct st),a[1]是相对于a[0]偏移了sizeof(struct st)的字节,值为7的是a[1].no即是p->next->no。因为p刚才说了是和a是相同的地址。
AC_YE 2020-06-10
  • 打赏
  • 举报
回复
引用 楼主 其实一开始我是拒绝的的回复:
为什么这题选c 不选d,还有为什么题目*p=&a,a是数组名,他本身不就是地址了吗,为什么好要用取地址符&
搞错了,答案是D

70,018

社区成员

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

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