C語言 自定義函式的傳值與傳址

2021-10-11 07:24:15 字數 1729 閱讀 7567

在學習自定義函式之前,我們先明確乙個概念,什麼叫自定義函式?自定義函式就是系統提供以外的函式。系統提供的函式叫做庫函式。

舉乙個簡單的例子:

我們平時使用的printf和scanf函式都是在乙個標頭檔案下的,在使用之前,要在程式的最前端標明使用了庫函式中哪乙個標頭檔案下的函式。

通俗來講,自定義函式就是我們為了方便程式維護,自己寫的具有某一特定功能的**。

庫函式與自定義函式的本質區別是:庫函式是常用的並且已經別別人寫好了的函式,譬如:printf、scanf;自定義函式是自己寫的,例如沒有庫函式可以實現資料交換,所以我們需要自定義函式來實現這樣的功能。

返回值型別 函式名 (型別 形參)

例如:

void findmax(int a,int b,int c)

自定義函式乙個函式,並且實現功能:交換兩個資料的數值後輸出。

1.常見錯誤(傳數值):

**如下:

#include

"stdio.h"

void

swap

(int x,

int y)

intmain()

1.1輸出結果:

由圖可見,自定義函式中輸出的結果與主函式中輸出的結果不同,這說明:資料只是在自定義函式中發生了交換,交換後的數值並沒有傳回給主函式,導致兩處地方輸出結果不一致。那麼如何才能糾正這裡的錯誤呢?這個時候就需要使用我們的傳址了。

**如下:

#include

"stdio.h"

void

swap

(int

*x,int

*y)/*swap函式通過解引用找到對應位址上的數值,在對數值進行操作*/

intmain()

2.1輸出結果:

由上圖可見,傳位址使得自定義函式和主函式中的輸出結果保持一致,自定義函式中的數值成功傳回主函式中並輸出。

那麼究竟是為什麼,傳位址可以順利的將自定義函式中的數傳回給主函式,而傳數值就無法實現呢?

3.傳值與傳址的實現原理:

函式在呼叫過程中,系統會給函式建立乙個棧幀棧幀就是一段空間,這段棧幀空間中用來儲存函式裡面定義的區域性變數(包括函式的引數)…

圖一(傳數值):

圖二(傳位址):

將a和b的位址傳遞給swap函式,swap函式通過解引用找到對應位址上的數值,在對數值進行操作,這樣就可以從本質上改變量值的大小,從而實現將引數傳回。

以上就是今天要介紹的內容,本文簡單介紹了傳值和傳址的區別,以及什麼樣的原理導致傳址可以實現引數回帶。

函式的傳值與傳址

這裡介紹一下,函式引數傳遞方式 傳值與傳址.希望看過後,大家對函式的了解更深刻.一 傳址方式 傳址方式是通過引用來實現在。還是我的習慣,用事實說話。看下面例子。例1 程式開始 fun1 int a,int b 這裡告訴編譯器,這個函式是傳址的,不是傳值的,所以所引用的引數在函式退出後值會改變 inc...

c語言的傳值和傳址

我們都知道c語言中函式傳參有兩種方式 傳值和傳址 傳值 實參把值傳給形參,但沒有傳位址,即對實參的修改無效 生成臨時變數 核心原理 函式會對形參和中間變數重新分配空間 void swap int pleft,int pright 優點 安全 函式的 不會影響外部實參 區域性變數值的交換對主函式的變數...

函式的傳值和傳址呼叫(C語言)

1 傳值呼叫。傳值呼叫顧名思義就是將引數的值傳遞給函式,而函式在進行呼叫時會複製這個值,然後將複製的值在函式中進行呼叫。void swap int a,int b int temp temp a a b b temp int main void int x 1,y 2 swap x,y printf...