2014-07-03 46 views
0

不過,我覺得我終於明白指針但後來我遇到過這個問題:這個指針有什麼問題?

typedef struct { 
    unsigned int a; 
    unsigned int b; 
} Bar; 

Bar *foo; 

foo->a = 3; 

這最後一條指令不能正常工作(如果我嘗試訪問foo->中的代碼別的一個地方,我要麼得到0或紅寶石)...我錯過了什麼?

+3

「不工作的時候」怎麼也?,你需要初始化指針指向正確的酒吧struct –

+2

'Bar * foo;',或者我更喜歡設置它,'Bar * foo;',正在創建一個名爲foo的類型爲*的指針指向Bar *。這不是酒吧。程序中沒有Bars,所以解除引用'foo'會崩潰。如果你幸運的話。 – Phoshi

+0

這樣想:指針只是一個地址。要找到男朋友或女朋友,僅僅選擇有吸引力的人並將他們的電話號碼輸入聯繫人列表是不夠的。你必須真正出去迎接他們,吸引他們,成爲合作伙伴!與此相比,錄製他們的號碼是非常簡單的部分。 –

回答

4

您需要實際創建一個Bar類型的對象,並使指針foo指向它。

Bar *foo = malloc(sizeof *foo); // Create a new Bar on the heap 
foo->a = 3;      // Now it works 

或者交替,將指針設置爲另一個對象的地址:

Bar actualObject;    // Create a new Bar on the stack 
Bar *foo = &actualObject;  // Set the pointer to the address of the actual object using '&' 
foo->a = 3;      // Now it works 

//NOTE: actualObject.a will also be 3 because it is the same object internally. 
+0

在純C中無法做到這一點,我可以嗎? oO –

+0

非常感謝,這是一個Phoshi的評論是我需要的:) –

+0

@Agnar當然可以。我已經將純C選項添加到第一個示例中。 – metacubed