2011-05-18 92 views
-1

例如:基本結構問題Ç

typedef struct { 
    int num; 
    int den; 
} rational_number; 

rational_number a;

是什麼事先使用 a.numa.den

a->numa->den

THX之間的差異。

+1

您是否嘗試過?怎麼了? – dlev 2011-05-18 05:35:06

+0

另請參閱:http://stackoverflow.com/questions/5998599/difference-between-and-in-a-struct – Bart 2011-05-18 05:36:25

回答

5

->用於訪問指向結構的指針的成員,而.用於訪問結構本身的成員。 a->num實際上只是(*a).num的簡寫。例如:當它是指針

對於離

typedef struct { 
    int num; 
    int den; 
} rational_number; 

rational_number a; 
r.num = 1; 
rational_number *a_ptr = &a; 
a_ptr->num = 2; /* a.num is now 2 */ 
0

使用a.num,當它是正常可變的,並且A-> NUM。

rational_number a; 
a.num; // is correct 
a->num; // is wrong 

rational_number *b; 

b.num;// wrong 
b->num; //is correct 
0

不同的是,在第一種情況下你通過堆棧變量訪問結構:經由堆指針

rational_number a; 
a.num = 1; 
a.den = 1; 

在第二種情況下:

rational_number* a = new rational_number(); 
a->num = 1; 
a->den = 1; 
0

如果被聲明爲指向結構的指針,a-> num將返回num的值。

rational_number *a; 
a->num = 5; 
int new_a; 
new_a = a->num; 

你有一個被聲明爲結構,所以你應該使用a.num來返回num的值。

rational_number a; 
a.num = 5; 
int new_a; 
new_a = a.num; 

兩個new_a的值設置爲5

此外,您還可以得到一個地址,如果它是一個結構,並使用它像一個指針。

rational_number a; 
(&a)->num = 5; 
int new_a; 
new_a = a.num;