在我的示例代码中:
#include <stdlib.h>
#include<stdio.h>
int main()
{
typedef struct {float x; float y;}C;
C z;
z.x=4;
z.y=6;
C *zpt=&z;
*zpt.x;
printf("%f",(*zpt).x);
}
我知道(*zpt).x
或zpt->x
用于取消引用指针。但是当我使用*zpt.x
时出错,错误 - &#34;请求成员&#39; x&#39;在一些不是结构或联合的东西中#34;有人可以解释*zpt.x
做什么吗?这是一个有效的语法,如果是,应该在何处以及如何使用它?
答案 0 :(得分:4)
这出错*zpt.x;
因为它被解释为
*(zpt.x)
没有任何意义。首先,没有zpt.x,第二,即使这是一个浮点某种方式,你不能在浮点数上使用*
这就是为什么 - &gt;运算符存在:zpt->x
与(*zpt).x
相同,但更易于阅读和输入
答案 1 :(得分:4)
你得到的错误是:
error: request for member ‘x’ in something not a structure or union
当编译器通知您时,zpt
既不是结构也不是联合。问题是点运算符(.
)的优先级高于星号(*
)的优先级,因此首先启用点,因此您会得到错误,因为编译器将其读作:*(zpt.x)
。
优先级1 :.结构和联盟成员访问
优先级2:*间接(取消引用)
用括号表明你希望运算符如何工作,所以
(*zpt).x
工作得很好,但你会收到这样的警告:
warning: statement with no effect [-Wunused-value]
因为你什么都不做,但我知道这只是测试代码。
我建议阅读相关问题: