2013-04-22 28 views
1

假設我有後續代碼與結構指針一起使用的 - >運算符是否也可用於聯合指針?

union test 
{ 
int salary[10]; 
short ages[20]; 
} *ptr; 

那我能不能給點工資爲ptr->salary[1]的第二個元素?或者我使用ptr.salary[1]

+1

是的,'ptr-> salary [1]'或'(* ptr).salary [1]'是正確的。不,'ptr.salary [1]'是不正確的,那就是要求一個既不是結構也不是結合體(即指針)的成員。 – 2013-04-22 15:22:21

+0

我從來不知道結構或數組的'(* ptr).salary [1]'語法!!你能不能告訴我爲什麼這是可行的? '* ptr'應該不是'指針'的值嗎? – 2013-04-22 15:25:06

+0

@TSingh:正是。並且該位置的值的類型是union/struct,因此您可以使用它。 – FatalError 2013-04-22 15:26:18

回答

1

使用ptr.salary[1]不正確,因爲ptr仍然是指向它所指向的類型的獨立指針。

正確的方法是:

ptr->salary[1] 

(*ptr).salary[1] 

在第二種情況下,不要忘了()*.具有較低的優先級。

+0

Daniel說'(* ptr).salary [1]' – 2013-04-22 15:30:45

+1

這只是這個問題的部分答案。你是正確的,'ptr.salary [1]'是不正確的,但是你不會說''>'運算符對於指向工會的指針以及指向結構體的指針是有效的。 – 2013-04-22 15:31:56

+0

@KeithThompson固定 – Alex 2013-04-22 15:34:29