读书人

指向结构的指针解决思路

发布时间: 2012-02-15 12:09:44 作者: rapoo

指向结构的指针
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么?应该如何理解?

[解决办法]
P是一个指针
*P是值
(*P).i
[解决办法]
(**P)-> i
--
(**P).i
[解决办法]
对于一个指向结构体的指针,标准写法是这样,(*p).i
但是这样写毕竟很麻烦,所以C标准提供了一种更简便的写法,就是p-> i;
对于**p这样的二级指针,那么*p保存的就是结构体地址了(不同于单指针中,是p保存地址),所以双指针想引用到结构体里的数据就应该这样写(*p)-> i或者(**p).i
[解决办法]
指针类型才用 ->
非指针类型用 .

你OneStuct *p,这里p是指针类型,所有要用 ->
而你将它(*p) 括号之后,它就是一个非指针类型,表示p指向的结构内容,应为 .
同样道理
OneStruct **p 是 指针,而 (**p)是一个非指针类型,表示p指向的结构内容,应为 .
(*p)是一个指针类型........
[解决办法]
以下3种形式等价:
1、结构体变量.成员名
2、(*p).成员名
3、p-> 成员名
其中p是指向该结构体变量的指针

读书人网 >C语言

热点推荐