指向结构的指针

不若人生一场醉 2007-04-26 11:10:42
typedef struct onestruct
{
int i;
int n;
}OneStruct;

OneStruct* P;//指向OneStruct的指针
访问字段的代码是这样
P->i和P->n

问题是为什么不是这样访问:
(*P)->i和(*P)->n

P->i这样访问是C的默认约定么?那么对于这样:OneStruct** P,指向结构指针的指针该如何访问字段,照我的理解应该这样访问(**P)->i,无法编译通过,正确的方法是这样(*P)->i么?应该如何理解?
...全文
324 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
南京大白蔡 2007-04-26
  • 打赏
  • 举报
回复
以下3种形式等价:
1、结构体变量.成员名
2、(*p).成员名
3、p->成员名
其中p是指向该结构体变量的指针
飞哥 2007-04-26
  • 打赏
  • 举报
回复
指针类型才用 ->
非指针类型用 .

你OneStuct *p,这里p是指针类型,所有要用 ->
而你将它(*p) 括号之后,它就是一个非指针类型,表示p指向的结构内容,应为 .
同样道理
OneStruct **p 是 指针,而 (**p)是一个非指针类型,表示p指向的结构内容,应为 .
(*p)是一个指针类型........
intuition444 2007-04-26
  • 打赏
  • 举报
回复
对于一个指向结构体的指针,标准写法是这样,(*p).i
但是这样写毕竟很麻烦,所以C标准提供了一种更简便的写法,就是p->i;
对于**p这样的二级指针,那么*p保存的就是结构体地址了(不同于单指针中,是p保存地址),所以双指针想引用到结构体里的数据就应该这样写(*p)->i或者(**p).i
lidongri 2007-04-26
  • 打赏
  • 举报
回复
(**P)->i
--
(**P).i
lidongri 2007-04-26
  • 打赏
  • 举报
回复
P是一个指针
*P是值
(*P).i
  • 打赏
  • 举报
回复
好,清除了

69,382

社区成员

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

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