傳遞陣列 C 入門篇 三十 ,向函式傳遞陣列

2021-10-16 04:06:59 字數 1123 閱讀 7148

陣列的儲存空間很大,如果能夠把他作為引數傳遞給函式,那麼就能發揮很大的作用,如它就能夠在一堆數字中選出最大的數了,這大大的提高了程式的效率。當函式中的某個引數是陣列時,在形參後面加上一對中括號,如int a,表示引數a是乙個陣列,下面我們來寫乙個在一堆數字裡找出最大數的程式。

#include "iostream.h"

int max (int a,int size);

int main()

int number=;

cout <

return 0;

int max(int a,int size)

int temp=0;

for (int i=0;i

if (a[i]> temp)

temp=a[i];

return temp;

功能分析;以上這段程式能夠將陣列中最大值求出並返回,使用函式來求最大值能有更好的通用性。

我們發現,在函式裡使用陣列也是比較方便的。但大家有沒有考慮過乙個問題:為什麼不在函式裡用sizeof算出陣列的大小,而非要在函式外面算好了,再作為引數傳遞給函式呢?在這裡,我們就有必要了解一下陣列作為引數傳遞給函式的原理了。

以前說過,引數的傳遞是將實參的值賦給形參,然而對於陣列來說卻是個例外,因為陣列的資料太多了,將其一一賦值,既麻煩又浪費空間,所以陣列作為引數傳遞給函式的只是陣列首元素的位址,函式在需要用到後面陣列元素時,在按照這個位址和下標去查詢。也就是說,後面的元素根本沒到函式裡來,在函式裡求不出函式的大小也就可以理解了,所以,當乙個函式的引數是乙個陣列時,必須先算出這個陣列的大小。

不過,既既然傳遞給函式的是陣列首元素在記憶體中的位址,而資料又都是存在記憶體裡的,那麼在函式中對陣列引數的修改會不會影響到實參本身的值,我們寫一段**來驗證一下。

上圖中是乙個排序程式,排序是經常使用到的一種功能,排序的演算法有很多種,上圖中的方法稱為直接選擇排序,就是在未排序的號碼中找出最小的號,與未排序的首個號碼進行調換。

以上這段程式實現了陣列中元素的排序,我們交換了sort函式陣列引數a中元素的順序,卻發現回到主函式以後,num陣列的元素次序也發生了變化。正是因為在函式中對記憶體中的資料作了操作,所以影響到了實參的值。

C 向函式傳遞物件

物件可以作為引數傳遞給函式,其方法與傳遞其他型別的資料相同。在向函式傳遞物件時,是通過傳值呼叫傳遞給函式的。因此,函式中對物件的任何修改均不影響呼叫該函式的物件本身。例3.11 使用物件作為函式引數。includeclass aclass void set int n int get private...

C 如何向函式傳遞物件

一.值傳遞 函式中如果對物件進行了修改,物件的值不變 相當於建立物件的乙個副本傳遞給函式 include using namespace std class test test void setnum int a int getnum private int num 值傳遞 void add tes...

LUA c 互動篇 c 向lua傳遞table

2.測試 an highlighted block typedef unordered map double sdmap static void adddic lua state l,sdmap mp static intaddtablearray lua state l int size,sdma...