我知道,如果我在C编程语言中有一个指针,并且我必须指向一个结构,我就知道:
struct mystruct S;
struct mystruct *ptr;
ptr=&S;
ptr->member=5;我明白这一点,但我不明白为什么,如果我这样做:
ptr=&S;
(*ptr).member=5;*ptr应该指向结构的第一个地址,但是如果我这样做,它为什么不能工作:
*ptr.member=5;发布于 2016-11-18 21:49:03
操作符有优先:成员访问操作符.具有最高的优先级,而取消引用*的优先级次之。因此,*p.member试图找到指向mystruct的指针的成员member,然后取消引用它。因为*mystruct没有一个名为member的成员,所以这是一个错误。
发布于 2016-11-18 21:47:50
如果你有一个结构
struct A
{
int x;
};和结构类型的对象。
A a;然后,要访问它的数据成员x,您必须编写
a.x = 5;或者你可以写
( &a )->x = 5;现在,如果有一个类型为struct A *的指针,该指针由对象a的地址初始化。
struct A *pa = &a;然后表达式*pa给出对象a本身。所以你可以写
( *pa ).x = 5;所以现在比较一下。一方面,一方面
a.x = 5; and ( *pa ).x = 5;另一方面
( &a )->x = 5; and pa->x = 5;发布于 2016-11-18 21:48:08
因为对成员运算符(点)的访问优先于取消引用(*)。
因此,您的表达式相当于:
*(p.member) = 5而p.member不是指针。
https://stackoverflow.com/questions/40686387
复制相似问题