关于(*结构体指针).成员名
结构体变量访问方式一共有三种
结构体指针-> 成员名
结构体名.成员名
(*结构体指针).成员名
第三种里的*和“()”有什么涵义?
[解决办法]
对于指针,*的作用是所谓的“去指针”运算。
举例说明:
int a = 10;
int *p;
p = &a;
如此一来,p的值是整形变量a所在的地址,而p指向的地址所存储的内容是a的值:10.
也就是:
p = 0xa0000001(这个地址是我随便编的阿,反正就是一个地址)
而
*p = 10;
也就是说*运算符的作用是取指针p所在地址的内容。
*p 其实和 a 是同样的东西。
对于结构体:
typedef sturct stu{
int a;
int b;
}stu;
如果我定义:
stu c;
c.a =1;
c.b =2;
stu *d;
d = &c;
这样就建立了指向结构体变量c的指针d.
这个时候,
d-> a = 1
d-> b = 2
如果这样写:
*d,实际上是表示取出d所指向的地址的内容,也就是结构体变量c的具体值。换句话说,*d和c是同样的意思。
至于为什么要写(*d).a和(*d).b的形式,那是为了让编译器通过括号运算符首先解析(*d),然后再解析后面的.a或.b 。试想,如果你直接写 “*d.a” ,那如果编译器是按照从右到左的顺序解释,很可能就先解释 "d.a " , 然后再解释 *(d.a), 明显d.a是不存在的,因为d是指针,不能匹配“.”操作符,就会出错。
你滴明白?