C 指標作為函式引數介紹

2021-05-14 09:12:26 字數 717 閱讀 6774

void getptr(int *_p,int num)

void main()

我們想通過以上**來為ptr分配記憶體,結果如何呢,大家可以試一下,肯定是失敗的。同樣還有下面一段**來實現上面所述功能。

void getptr(int **_p,int num)

void main()

第2段**可以實現為ptr動態分配記憶體。與第一段相比,我們首先會有乙個疑問:指標作為函式引數傳遞時,傳遞的不是當前指標本身?當然,指標作為形參時,傳遞的是當前指標的乙個副本,否則第一段**就可以啦。先說第一段**,"傳遞"p的時候會生成副本_p,_p和p是兩個不同的指標變數,但它們指向同乙個資料。因此,第一段**不能為ptr分配記憶體,而是為其副本分配了記憶體。

正確的做法可以用第2段**,因為副本和原本指向同乙個資料,那我們可以把ptr作為資料,也就是把ptr封裝在一指標裡面,即使用二維指標int **p=&ptr。到此,大家可以理解指標作為函式引數的傳遞過程了。而且既然指標被傳到函式裡面了,還有什麼不能做的呢。

說些題外話,有些人愛多想,既然原本和副本指向同一塊資料,那可以在資料上做點文章。如果能想到這,說明你是乙個會學習的人,不錯。但要提醒大家,首先要搞清楚char *p="abc"的原理,我可以告訴大家結論,但還是希望能自己多去google。char *p="abc"等同於 const char *p="abc",也就是不可以通過p來改"abc"了。所以當你想運算元據時,有時候會讀,有時候既可以讀又可以寫。

指標作為函式引數,C語言指標作為函式引數詳解

include void swap int a,int b 函式宣告 intmain void void swap int a,int b 大家想一下,執行這個程式是否能互換 i 和 j 的值?不能!i 還是3,j 還是5。因為實參和形參之間的傳遞是單向的,只能由實參向形參傳遞。被調函式呼叫完之後系...

指標作為函式引數

當指標作為函式引數時,對引數本身的修改並不影響原來的值,比如下面的 刪除鍊錶中第乙個值為item的結點。但是結果卻不正確。void delete node head,int item 這段 的問題是,第乙個引數是指標型別而head null修改的實際上是這個指標的乙個副本,所以不會對原來的指標產生效...

指標作為函式引數

臨近畢業,還有找工作的事情,繁忙之際還是堅持看一下c語言的知識,重點的地方或者不清楚的地方還是要記錄一下。本章以指標作為函式傳參來說一下學習心得,大部分內容源自c語言程式設計課本。首先從c語言中函式引數的傳遞方向說起,大家都知道,c語言中函式引數的傳遞方向是單向的,只能由主調函式的實參傳遞到被調函式...