關於函式用指標作為引數的易犯錯誤總結

2021-09-26 16:13:49 字數 795 閱讀 5618

前言:cc++在函式中使用引數進行傳遞時,如果要想改變main函式兩個變數的值,此時就得用到將引數定義為指標的思想,然而在使用指標進行引數傳遞時,常常會導致錯誤,令人百思不得其解,下面我就個人的認知,使用函式交換兩個數為例子,進行分析。

void swap(int* a, int* b) 

int main()

分析:此寫法首先定義乙個區域性指標t,使它指向指標,再將a指標指向b指標(將指標的值和位址都賦給a),最後將b指標指向t指標(同上)。這樣一來,在這個函式體中,實現了a、b間 位址與值的同步修改,但這往往會導致乙個誤區:認為位址與值都修改了,那麼a、b也實現了交換。其實這個交換只是在函式體內有效,在主函式中並沒有真正實現a與b的交換。(這裡很難想清楚,可以認為如果指標作為形參傳遞,在函式對指標的位址進行交換,可以看作是跟普通變數做形參一樣,傳遞進來的只是位址的副本),總之,我們的一切還得回歸到指標作為形參傳遞的實質:只是使指標的值發生改變,並沒有使指標的指向(即位址)發生改變,即我們要進行的是對指標的位址值修改,而不是位址。

swap函式輸出:

交換前:0x61ff1c 0x61ff18

交換後:0x61ff18 0x61ff1c

主函式輸出:

1 2

交換前:0x61ff1c 0x61ff18

交換後:0x61ff1c 0x61ff18

1 2

可以看出,在主函式中a、b未能成功實現交換

指標作為函式引數

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

指標作為函式引數

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

指標作為函式的引數

一 呼叫getptr後ptr仍然為null程式出錯 include include void getptr char p,int num int main 二 修改程式 include void getptr char p,int num int main 解釋 首先要說明的是char ptr,開始...