關於C 自定義函式的引數以及傳輸數值或位址

2021-10-04 14:07:33 字數 2678 閱讀 5387

實參與形參

全域性變數

非全域性變數(或稱區域性變數)

傳輸數值

傳輸位址

對比——講解涉及到的概念將在這個模組講解。

1 實參與形參

形參:也就是「形式引數」,是在定義函式名和函式體時會用到的引數,目的是用來接收在其他的**片段呼叫該函式時傳遞的引數。比如你定義了乙個函式int cgz(int n, int m);這裡的 n, m 就是形參,它們只是乙個「空」,接收實參傳來的數值。或者說,實參的值傳給形參,就是一道……填空題?

實參:也就是"實際引數",是在呼叫時傳遞給函式的引數,也就是說,傳遞給被呼叫函式的,是乙個數值。比如說,你在主函式中定義了兩個變數 a、b,然後在接下來一行寫下c++標準庫中的max()函式,這時你寫到max(a, b);,這時的 a, b 就是實參,他們把自己的值傳輸給了max()函式處理,然後返回了乙個最大值。

2 全域性變數

有些自定義函式,在定義時程式設計師並沒有寫上形參的語句。就像這樣:

void

example()

;^無形參

或:void

example

(void);

^^^^無形參

這時如果要在函式中對程式進行處理計算,一般是使用全域性變數。

q&a

q:那麼全域性變數是什麼意思呢?

a:全域性變數,簡單點說就是不在任何自定義函式(包括主函式)中申明定義,而是在所有函式之外定義的變數。

比如這個程式中,變數a不在任何自定義函式(包括主函式)中申明定義,這就是乙個全域性變數。

#include

using

namespace std;

int a;

//在所有自定義函式(包括主函式)之外定義。

intby_myself

(void

)int

main()

注:程式中有些地方尚未講解,下面會涉及到。

3 非全域性變數(或稱區域性變數)

非全域性變數(或稱區域性變數)也稱為內部變數。區域性變數是在函式內作定義申明的。其作用域僅限於定義它的函式內, 離開該函式後再使用這種變數是非法的。

以下看**理解:

int

example

(int a)

a,b,c作用域

這段**裡的a是形參,可以在這個函式內部呼叫;b,c是區域性變數。

1 傳輸數值

上文講解實參與形參時,是否注意到是實參將自己的值傳輸給了自定義函式中的形參?這就是從呼叫函式中的實參傳輸了乙個數值給被呼叫函式的形參。(這段可能有點拗口,可以多讀幾遍,一定要搞懂,很重要)

關於實參與形參,上文講得很清楚了,這裡不再贅述。

2 傳輸位址

先舉個例子:

#include

using

namespace std;

void

add1

(int

*a)void

add2

(int a)

intmain()

輸出:2

5

這兩個自加函式中,add1是指標傳遞,add2是數值傳遞.

(以下兩段很重要)

在呼叫 add1(&x) 時,系統先建造int型指標a,然後將實參x的位址傳給了指標a,故此時a與&x是指向同一位址,即共享統一資料,當對位址a內的資料進行操作,就是對x進行操作。a++時自然也對x++,當函式呼叫結束,指標a釋放掉,x的值此時已經發生了變化。

可以說,這種方法就是把兩個資料「**」在了一塊。

在呼叫add2(y)時,系統是先建造乙個int型變數a,再將y的值傳給a(此時y和a是兩個不同位址的變數,只是兩者值相同),然後a++,卻對y沒有任何操作,故在函式呼叫結束後,釋放a,而y沒任何變化;

這種方法,主要是為函式內部接下來的運算服務的,對主函式沒有影響。

3 對比

這就是兩者不同,位址傳遞的引數是指標型別數值傳遞只是單純地讓被呼叫的函式「知道」乙個值

至於選擇那種傳遞,就要看這個程式的具體目的和功能了,一般要對引數進行修改的要用位址傳遞,而只是呼叫引數的資料進行其他計算並不需要修改資料本身宜用數值傳遞。

//cpp

#include

using

namespace std;

int n =6;

//全域性變數n,在所有自定義函式(包括主函式)之外定義。

intby_myself

(void

)void

add1

(int

*a)void

add2

(int a)

intmain()

輸出:5

25

ECShop 自定義函式以及呼叫

發表於 2010年08月25日 在ecshop模板的dwt檔案中,經常可以看到類似 或者的 對於,我們可以很理所當然猜想到它是呼叫js檔案的語句。而很多人都不清楚這個是呼叫的 的內容。其實,它與上面的類似,只是它掉的不是檔案,而是函式返回的字串,可以是html,也可以是普通字串。開啟ecshop的安...

sqlServer 自定義分割函式以及應用

乙個字段裡面的值是 roleinfo表的id 1,2,3,4,5 如何根據 該字段的值查詢到 roleinfo 的名稱 select stuff select rloename from roleinfo where rolesid in select from f splitstring 1,2,...

自定義引數 Python自定義函式引數

1.種類 1 位置引數 x就是位置引數 usr bin env python coding utf 8 def power x result x x print result 2 預設引數n就是預設引數 usr bin env python coding utf 8 def power x,n 1 ...