我有以下代码:
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
struct tag
{
int x;
};
int main()
{
struct tag stvar;
struct tag*stptr=&stvar;
*(stptr).x=9;
return 0;
}
我可以使用stptr->x
但不能使用*(stptr).x
。我正进入(状态
request for member 'x' in 'stptr', which is of pointer type 'tag*' (maybe you meant to use '->' ?)
我在哪里弄错了?如何使用struct指针访问成员?
答案 0 :(得分:2)
变化:
*(stptr).x=9;
到
(*stptr).x=9;
第一个语句相当于*(stptr.x)=9;
,因为后缀运算符的优先级高于一元运算符。当然最好使用专用的->
运算符来编写此语句:
stptr->x=9;
答案 1 :(得分:1)
一般来说,访问结构变量可以通过两种方式消失
value.structure_variable; // using (.) operator
或
( address or pointer )-> structure_variable // using -> operator
正如ouah在答案中指出的那样
*(stptr).x=9;
另一方面,是错误的作业
(* stptr)基本上是stptr对地址指针的值因此转换为一个值
(*stptr).x=9;
是有效的,因为stptr本身就是指针
stptr->x = 9;
是无害的,安全的,最受欢迎的分配方式。