出參傳遞陣列指標 C語言更新 指標函式

2021-10-11 23:46:11 字數 1352 閱讀 6837

今天開始,我們將來介紹c語言裡面最讓人頭痛的兩個東西,指標函式和指向函式的指標。

指標函式這個名字乍一看非常唬人,又是指標又是函式的,但是其實它並沒有想象的那麼複雜,千萬別被它的名字嚇到了。所謂的指標函式,說白了就是乙個返回值為指標的函式。其定義形式為:

資料型別 *函式名(形式引數1,形式引數2,……形式引數n);

指標函式其實類似於我們之前講述的利用指標型別的形式引數傳遞返回值,由於c語言早已經規定了乙個函式只有乙個返回值,但是當我們需要讓乙個函式返回出多個返回值的時候,可以讓它返回乙個指標。其實指標函式配合我們後續將要學習的結構體效果更加,而本小節我們使用指標函式來返回乙個指向陣列的型別。

假設我們需要寫乙個函式實現乙個功能,將乙個陣列中的所有元素全部取反,然後輸出。要實現這個功能對於現在來說已經非常簡單了,我們只要使用之前學過的指標型別形式引數將結果傳遞出來即可,實現**如圖1所示。

這種用法有乙個比較不明了的地方,就是它利用引數的形式把函式結果傳遞出來,對於某些強迫症患者來說比較虐心。那麼使用指標函式是否就可以解決這個問題了呢?。如圖2所示。

我們可以將運算的結果直接利用指標函式返回的指標返回出來。雖然理想很美好,但是顯示肯定是殘酷的,因為這種方法根本實現不了陣列的返回。這是因為當我們返回乙個指標的時候,它所指向的陣列ret_array是乙個臨時變數定義的陣列,因此一旦當函式退出時,這一塊記憶體立即被編譯器**,所以得到的結果會和我們期望的南轅北轍。

要解決這個問題其實也很簡單,我們只需要將函式中用以儲存結果的陣列宣告成靜態的即可,如圖3所示。

雖然我們可以利用指標函式實現我們想要的結果,但是由於其返回的是乙個位址,因此想要結果得以正常返回,一定要保證這個位址是唯一且永遠存在的,因而一定要定義靜態型別的變數來存放這個位址。正由於這個原因,函式指標用起來其實非常容易出錯,因此就連c語言庫函式都很少用這種方式去傳遞函式結果。我們以後如果要傳遞回來多個結果時,一定要利用指標型別的形式引數去傳遞,而返回值只做乙個函式運算結果的狀態。

C 陣列指標 指標陣列及陣列傳參

一維陣列傳參 二維陣列傳參 一級指標傳參 二級指標傳參 小引 在指標的學習階段,有不少同學都十分畏懼這個物什,甚至 談指標色變 其實對指標的不理解,其實本質上是對記憶體的不理解,本篇部落格就從零開始 系統的來講解指標這個話題。首先我們應該明確以下的一些基礎常識 指標是乙個變數,用來存放位址,位址唯一...

指標陣列 陣列指標 陣列傳參

指標陣列 實際上是乙個陣列,陣列中存放的元素是指標 例如 int arr 10 char arr1 5 陣列指標 實際上是乙個指標,指向乙個陣列的指標 例如 int p 10 這就表示乙個p指標,指向乙個大小為10陣列 在陣列傳參的過程中,由於c語言的對於速度的要求的特點,是不會傳整個陣列的,最終陣...

指標陣列陣列傳參 指標引用傳參

指標和陣列作為引數傳入函式時,傳入的是位址,即指向變數的位址和陣列的首位址,可以在函式中改變指標或陣列的值,但本質上它們還是值的傳遞 區別於變數的值傳遞的是 變數值傳遞不會改變實參原來的值。我們無法對指標和陣列的位址進行操作 如 位址賦值,分配記憶體等 要進行位址操作需要使用指標引用或指標的指標。示...