2014-10-30 82 views
-1

我需要幫助理解我們如何獲取Loc3和Loc4下表中的值。 當我自己製作一張桌子時,我到達了那些專欄的完全不同的條目。 謝謝!需要幫助理解涉及指針的C練習的解決方案

int x = 42; /* x is at address 100 */ 
int y = 13; /* y is at address 104 */ 
int *p; /* p is at address 108 */ 
int **p2; /* p2 is at address 112 */ 
/* Location 1 */ 
p = &y; 
p2 = &p; 
/* Location 2 */ 
*p2 = &x; 
**p2 = 11; 
/* Location 3 */ 
*p = 12; 
/* Location 4 */ 

enter image description here

+1

*你得到了什麼*值?你是如何得出你的價值的? – 2014-10-30 14:45:03

回答

3

例如,X在中Loc3變爲11,因爲你設置**p2到11,這在修改該存儲單元的值。 (雙星是指向指針的指針)。 &符號獲取地址。

要闡述:

*p2 = &x; 
**p2 = 11; 

在中Loc2設置p2 = &p,這意味着p2現在指着p的地址,這是108

但現在在中Loc3,你設置什麼p2是指向x的地址。換句話說,由於p2指向的地址是p,現在你應該說p應該指向地址x(這也是爲什麼p變爲100)。

然後**p2修改以x該地址的值是11(通過p),因此中Loc3的x值變爲11

1

位置1:

int x = 42; 
int y = 13; 
int *p; 
int **p2; 

pp2別t指向任何地方。

地點2:

p = &y; 

py

p2 = &p; 

p2指向p

x或y沒有變化。

位置3:

*p2 = &x; 

由於p2p,解除引用p2和它的變化p指向x分配一個值。和做p = &x一樣。

**p2 = 11; 

提領一次,以再次得到p,提領去x,並指定11到它。一樣做:x = 11*p == 11

沒有改變爲yp2

地點4:

*p = 12; 

提領px和assing 12到它。沒有改變爲yp2p

0

當啓動時,pp2是未初始化和含有不定值,因此,在兩個條目的??下祿1.

p = &y; 

分配位置的y(104)p

p2 = &p; 

分配的p(108)的位置來p2。請注意,表達式&p的類型是char **,其與變量p2的類型匹配。因此,這兩個語句之後,以下所有條件都爲真:

p2 == &p  == 108 // all expressions have type char ** 
*p2 == p == &y == 104 // all expressions have type char * 
**p2 == *p == y == 13 // all expressions have type char 
       x == 42 

接下來我們執行

*p2 = &x; 

從上面我們可以看到,*p2相當於p,因此該語句分配的x(地址100)p,所以現在我們有

p2 == &p  == 108 
*p2 == p == &x == 100  
**p2 == *p == x == 42 
       y == 13 

接下來我們執行

**p2 = 11; 

**p2相當於*p,這相當於x,所以我們拉閘值11分配給x

p2 == &p  == 108 
*p2 == p == &x == 100 
**p2 == *p == x == 11 
       y == 13 

最後,我們有

*p = 12; 

*p相當於x,所以我們將值12分配給x,留給我們:

p2 == &p  == 108 
*p2 == p == &x == 100 
**p2 == *p == x == 12 
       y == 13