2016-11-15 78 views
-1

之間的區別我給這個問題做了一個練習,但是我找不到fp0 = &hundred;後要做什麼。有人可以幫我嗎?`* p =&`與`p =&`

按照pointex.c中的代碼片段工作。會打印什麼?

隨着一些後來的練習繪製代表變量 的方框和代表指針的箭頭。

//code fragment g 
float ten = 10.0F; 
float hundred = 100.0F; 
float * fp0 = &ten, * fp1 = &hundred; 
fp1 = fp0; 
fp0 = &hundred; 
*fp1 = *fp0; 
printf("ten/hundred = %f\n", ten/hundred); 
+0

你辦理任何C教程以行使前?即使再有一絲的問題'代表什麼人停止實際編制本和測試呢?爲什麼連pointers.' –

+2

箭頭一個問題? – John3136

+0

注意'*'在一個聲明中(變量是一個指針)意味着一件事,而在用作解引用操作符時則意味着另一件事。 –

回答

0

讓我們從這條線開始:

float * fp0 = &ten, * fp1 = &hundred; 

在這一點上,fp0點的ten地址,所以如果它被解除引用像*fp0它會返回10.0F。同樣*fp1將返回100.0F。 此線之後:

fp1 = fp0; 

fp1點的ten地址,因爲其值是現在的fp0值,這僅僅是指向其中ten變量被存儲的存儲器位置的地址。 指針只是地址。取消引用返回指針指向的特定地址處存儲的值。然後我們有這樣一行:

fp0 = &hundred; 

現在fp0持有hundred變量的地址,所以取消引用它將返回100.00F。接下來的這個部分可能是一個有點棘手:

*fp1 = *fp0; 

提領fp1,我們實際上要到地址fp1點和覆蓋與存儲在地址值以前存儲在那裏(10.0F)的值fp0指向(100.0F)。因此,以下的輸出:

printf("ten/hundred = %f\n", ten/hundred); 

將是「十/百= 1.000000,因爲我們將通過100.0F 100.0F

0

一行代碼的行解釋考慮[]表示。地址。

float ten = 10.0F; 
float hundred = 100.0F; 

float * fp0 = &ten, * fp1 = &hundred; 

//fp0 --> [10.0F] 
//fp1 --> [100.0F] 

fp1 = fp0; 

//fp1 --> [10.0F] 

fp0 = &hundred; 

//fp0 --> [100.0F] . fp0 get the address of variable hundred. 
//That means fp0 can change the value stored by variable hundred. 

*fp1 = *fp0; // the value stored at the address `fp1` takes the value stored at the address `fp0` 

// [10.0F] --> [100.0F] . Address that was storing 10.0f will now store 100.0f 
// So, ten = 100.0F and hundred = 100.0F 

printf("ten/hundred = %f\n", ten/hundred); //prints 1.00000 
相關問題