2017-01-30 183 views
0

我對理解指針有點新,所以我希望有人可以檢查一下,以幫助我確定指針是如何工作的。我試圖簡化的指針是什麼概念,以及如何使用它們從函數傳遞指針到函數

functA(int *numb){ 

functB(numb); 

} 

functB(int *numb){ 

functC(numb); 

} 

functC(int *numb){ 

*numb+=1; 

} 

int main(){ 

int testNumber = 0; 

functA(&testNumber); 
. 
. 
. 
} 

因此,在主,我要送testNumber的地址本功能A.所以,當我這個地址發送給functA,沒有問題,對嗎?

由於函數A有一個指針參數,它可以容納一個地址,當我發送一個地址時它不會遇到問題,對吧?然後,由於麻木(在functA中)是一個指針,我可以將它發送給functB,因爲functB可以接受一個地址。另外,我仍然發送與testNumber相同的地址,對嗎?我發numb(從functB)到functC,在functC中,我取消了這個位置(有沒有更好的方法來說這個?),並將計數增加1.所以當這個完成時,testNumber應該是1,正確嗎?

我知道這可能聽起來很愚蠢,但我只是想從概念上把握這一點。我花了更多的時間,而不是我願意承認試圖在我剛剛提交的一個項目上做出這個概念(我做了它,但它花了太長時間)

+0

似乎你的代碼改變'testNumber'指針的手段方式工作,並且'testNumber'的值應該是''functA(&testNumber)''後調用,如果你添加'; '在該行末尾 – VolAnd

+0

指針對新C程序員來說總是很棘手。請記住,在*旁邊,它是價值,沒有它,就是地址。當你傳遞一個指向另一個函數的指針,並且你想傳遞_address_時,傳遞變量名而不用星號。接收函數的變量必須有一個星號。傳遞一個值時反之亦然(除非你希望接收函數也是一個指針)。這些規則也有例外,但是我非常懷疑你需要擔心它們,除非你重寫了memcpy或其他東西;) – Aurelius

+0

@VolAnd啊謝謝你。我現在要修復 – Woff

回答

0

變量被存儲在存儲器中的位置,並具有存儲在它的值。每個地點都有地址。

variable

location_value

location_address

的指針(比如說,int *p)僅僅是像其它變量(比如,int a;)的變量。差異是某個位置的指針存儲地址(您已經知道)。

variable: int testNumber = 10;

location_value: 10

location_address: 0xABCD000 // <-- 'testNumber' is stored at this location

----------------------------

variable: int *numb = &testNumber;

location_value: 0xABCD000 // <-- note: value of 'numb' is an address, address of 'testNumber'

location_address: 0x1234000 // <-- numb itself is stored at 0x12340000

因爲numb是一個變量,您可以繼續將其值賦給其他相同類型的變量。

在你的情況下functC::numb = functB::numb = functA::numb = &testNumber = 0xABCD000。哪個是對的。

因此,當您解除引用*functC::numb時,您正在訪問存儲在地址functC::numb的變量,這恰好是testNumber。所以testNumber得到增加,當你做*functC::numb += 1;

2

太多的問題在這篇文章中。只要你認爲正確地址,你會很高興。但是這裏和那裏的指針太多可能會導致一些錯誤,請小心。

所以當我把這個地址發送到functA時,沒有問題,對嗎?

由於本功能A有一個指針參數,可容納地址,它將 不會碰到一個問題,當我發送一個地址,對不對?

另外,我還在發送相同的地址testNumber是, 是否正確?

.....有沒有更好的辦法說這個?)

否,是的,這取決於需求。

所以當這樣做,testNumber應該是1,正確嗎?

+0

請您詳細說明這個部分'不,是的,它取決於需求'? – 4386427

+0

@ 4386427如果可以的話,我會的,但我不能。有一種以上的方法來剝皮貓。可能是其他方式更合乎邏輯/可讀性,但國際海事組織我們無法分辨出當前OP的職位。 – P0W