2015-09-24 128 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; 

是無害,安全和最流行的方式來分配。