2015-09-24 130 views
-1

我有以下代码:如何访问结构成员与结构指针

#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 '->' ?) 我在哪里错了?如何使用结构指针访问成员?

回答

2

变化:

*(stptr).x=9; 

(*stptr).x=9; 

第一条语句相当于*(stptr.x)=9;作为后缀运算符比一元运算符优先级越高。当然,最好是使用专用->运营商写这篇声明:

stptr->x=9; 
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; 

是无害,安全和最流行的方式来分配。