2016-10-28 292 views
0

在下面的代碼中,我們被要求確定代碼的輸出是什麼。指針,雙指針,數組

#include <stdio.h> 

int main (void) 
{ 
int  x = -1; 
int  y = -1; 
int  **pp; 
int  *pi[2]; 

pi[0] = &x; 
pi[1] = &y; 
*pi[0] = 4; 
*pi[1] = 5; 
printf ("A: %d %d\n", x, y); 
pp = pi; // HINT: same as pp=&pi[0]; 

**pp++ = 90; 
**pp = 75; 
pi[0] = &y; 
**--pp = 35; 
printf ("B: %d %d\n", x, y); 

return 0; 
} 

它應該是:

答:4 5

B:90 35

我明白了4,5],但不是B.任何和所有幫助表示讚賞!

+0

沒有指針'double'。你的意思是「指針指針」!我們不是「做我的家庭作業」服務。見[問]。 – Olaf

+0

在一張紙上畫出來。我在視覺上思考指針,通過一些練習,很容易在你的腦海中完成。 – Fred

+0

嗨,奧拉夫,這實際上是對我最近的一次測驗,我只是沒有得到怎麼做。不是試圖讓你做我的功課,只是需要一些幫助,以滿足我的好奇心。同樣,指向指針的指針可以被稱爲雙指針。謝謝你的時間。 – newuser1001

回答

0

這個問題的關鍵是什麼時候發生增量和減量。因爲它是線路上的後遞增:

**pp++ = 90; 

原始指針的內容被修改(& X),然後在PI PP點[1]。然後PI [0]被設置爲y的地址:

pi[0] = &y; 

最後,頁是預decrimented並在PI指向[0],它指向y,然後它被更新。

**--pp = 35; 

編輯:改性說

+0

非常感謝您的幫助!現在對我有意義 – newuser1001

0

「的原始指針的內容」在此表達式中您指向pp至指針PI陣列。

pp = pi;

這裏取消引用頁(** Pp在PI指向[0]至極是指針至x),然後你asaign 90.所以,你在X得到值90。在和你增加指針pp,現在它指向pi [1]。

**pp++ = 90;

這是一樣previouse一步,但在這一刻你的PP指向PI [1]至極爲指針爲y。所以現在y是75.但是這次你不增加指針,所以pp仍然指向pi [1],這是y。

**pp = 75;

在此步驟中,您將35賦值給y,然後將指針遞減至pi [0]。所以,現在你的Y值是35。

**--pp = 35;

在你到底有X == 90和y == 35

+0

謝謝!這很容易理解!對此,我真的非常感激 – newuser1001