指針、指針的指針、指針的傳遞、流程圖思維導圖


  學習c語言的同學,在指針的傳遞中,好多搞不明白,為什么被調函數的形參有的時候用指針的指針,而不是用一般指針。

  一、如果是指針p已經有確定的指向且不需要在被調函數中改變它的指向(確定的指向也就是它的值,當然這個值一定是一個具體的地址,而不是NULL或野指針),只需要對指針p指向的地址進行操作,那么,被調函數形參請用普通指針就可以了;

  二、假如指針p沒有具體指向(NULL,也可能是個野指針)或有具體指向,需要在被調函數中改變p的指向(給它賦予一個新的值,當然這個值是一個地址了),那么被調函數的形參pp就需要用指針的指針(主調函數&p),在被調函數中通過對指針的指針pp進行解引用(*pp),獲取指針p的地址(指針p),向p的地址(指針p)寫值,就可以改變p的指向了,比如在被調函數中malloc一個空間,將該空間的地址賦值給p。

  三、有同學說了,普通指針也可以改變它的值,當然可以改變,改變了形參指針的指向,對實參毫無影響,實參還是指向原來的地址;還有同學說,什么指針,地址,變量弄不明白,這么說,所有的變量都是地址,指針變量,也是地址,不同的是指針變量保存的是地址,指針的指針只保存指針的地址,普通變量保存的什么不用說了吧,還有,請不要把p和&p混為一談,p是p(變量),&是運算符,&p是取p的地址,p = p1;是把p1的值賦值給p。

下圖的p是主調函數的指針變量;pp,q是被調函數的指針變量;c語言的參數傳遞是值傳遞;

指針的指針傳遞的是p的地址(200010) ,一般指針傳遞的是p的值(10001)

  這個圖,是用網上的在線流程圖編輯器畫的,請點擊這里。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM