2014-03-03 141 views
-1
struct sample 
{ 
    int a; 
    char b; 
    float c; 
    int *al; 
    union un 
    { 
     int a; 
     char c; 
     float f; 
    }*ptr; 
}test; 

如何訪問結構成員'al'和聯合成員a,c,f?如何訪問C中的結構內的指針成員?

+0

sample.ptr->爲你的工作?或*(sample.al)? – ciphermagi

+0

我想在訪問它們的時候使用'test'和'ptr'al和a,c,f respec。這是如何運作的? – Arun

+0

'test.ptr-> a;'會工作。 – jfly

回答

2

比其他人沒有區別:

  1. 訪問al

    test.al 
    

    如果你想的al的價值,你可以通過*(test.al)得到它。

  2. 訪問acf

    test.ptr->a; 
    test.ptr->c; 
    test.ptr->f; 
    
+0

仍然需要解除引用test.al. test-> al顯然不起作用,因爲你不是取消引用測試,所以*(test.al)會使它更清晰。 – ciphermagi

+0

@ciphermagi'test.al'是變量本身,'*(test.al)'是該變量的值。無論如何,你有一點。答案已更新。 –

+4

我不相信'*(test.al)'比'* test.al'更清晰。 –

0

的事情是,你需要取消引用指針。

通常我們會這樣做,以解除工會的解除。

test.*ptr.a.

這樣做的問題是,編譯器將反引用符號之前執行dotnotation,編譯器會因此取消引用工會的領域,而不是聯合它的自我。

爲了解決這個問題,我們可以把'* ptr'in圓括號強制在訪問該字段之前使用聯合。喜歡這個。

test.(*ptr).a

爲了更方便的語法,這也可以寫成

test.ptr->a