“C 中,陣列只能通過值引數和引用引數兩種方式傳遞函式

時間 2021-06-25 14:48:03

1樓:匿名使用者

傳參有三種方式:值引數、指標引數和引用引數

2樓:

在把陣列作為引數傳遞給函式時,有值傳遞(by value)和地址傳遞(by reference)兩種方式。

在值傳遞方式中,要在陣列引數的尾部加上一對方括號(),呼叫函式時只需將陣列的地址(即陣列名)傳遞給函式。

例如:如果陣列x被宣告為:int x[10];

那麼函式被說明為:void byval_func(int);

引數int告訴編譯程式byval_func()函式只有一個引數,即一個由int型值組成的陣列。 函式呼叫時只需將陣列名傳遞給函式:byval_func(x);

#include

void byval_func(int);

void main(void);

void main(void)

void byal_func(int i)

在值傳遞方式中,陣列x將被複制一份,複製所得的陣列將被存放在棧中,然後由byval_func()函式接收並列印出來。由於傳遞給byval_func()函式的是初始陣列的一份拷貝,因此在byval_func()函式內部修改傳遞過來的陣列對初始陣列沒有任何影響。

值傳遞方法的開銷是很大的,因為首先它要完整地複製初始陣列並將這份拷貝存放到棧中,這將耗費相當可觀的執行時間, 因而值傳遞方法效率較低;其次,初始化陣列的拷貝需要佔用額外的記憶體空間(棧中的記憶體);最後,編譯程式需要專門產生一部分用來複制初始陣列的**,這將使程式變大。

地址傳遞方法克服了值傳遞方法的缺點。在地址傳遞方法中,傳遞給函式的是指向初始陣列的指標,不用複製陣列,因此程式變得簡練,也節省了棧中的記憶體空間。在地址傳遞過程中,只需在函式原形中將函式的引數說明為指向陣列元素資料型別的一個指標。

例如同樣定義一個陣列x:int x[10];

那麼函式被說明為:int const_funt(const int*);

引數const int*告訴編譯程式const_funt()函式只有一個引數,即指向一個int型別常量的指標。

函式呼叫時只需將陣列的地址傳遞給函式:const_func(x);

#include

void const_func(const int*);

void main(void);

void main(void)

void const_func(const int*i)

在值傳遞方式中,沒有複製初始陣列並將其拷貝存放在棧中,const_func()函式只接收到指向一個int型別常量的指標,因此在編寫程式時要保證傳遞給const_func()函式的是指向一個由int型別常量組成的陣列的指標。const修飾符的作用是防止意外修改初始陣列中的某一個元素。

3樓:匿名使用者

陣列不能通過值引數傳遞函式

c中函式呼叫是按值傳遞的,傳入引數在子函式中只是一個初值相等的副本,無法對傳入引數作任何改動。但實際程式設計中,經常要改動傳入引數的值。這一點我們可以用一個小技巧,即“傳入引數的地址而不是原引數本身,當對傳入引數(地址)取“*”運算時,就可以直接在記憶體中修改,從而改動原想作為傳入引數的引數值。

c++ “陣列可以通過值引數和引用引數兩種方式傳遞給函式”的說法對否?

4樓:匿名使用者

不對。int,char或者自定義的類可以通過值引數和引用引數兩種方式傳遞給函式,陣列不行。

陣列是兩種指標傳遞:

void sort(int *a); //對於指標a來說是值傳遞,對於陣列來說是指標傳遞

void sort(int a[100]); //這種方法類似於引用,但實質上還是指標傳遞

5樓:謝3哥

當然對了

1,引用 int aaaa(int& a);

2,值 int bbbb(int b);

在c++中,用陣列,指標,和什麼作為函式引數,能夠將引數值帶回

6樓:

除了引用可以將引數值帶回外其餘的(陣列,指標等)都沒有這種能力!如果原題確實是這麼出的,那隻能說明出題者是c++半吊子……

7樓:匿名使用者

引用,三者的本質都是指標

8樓:wl梢包

還有 引用&和全域性變數

9樓:匿名使用者

地址,三者的本質都是地址

c語言陣列中括號的問題,C語言陣列中括號的問題

函式形參中int sorce其實相當於int sorce,所以是指標而不是陣列,不信你可以在函式內改變形參sorce的值,而陣列是不可以重新賦值的。c 是不接受陣列作形參的。 可以在定義陣列的時候直接賦值,那樣就可以省略了列如 int a 陣列定義時必須確定長度,系統才知道給它分配多少記憶體。陣列作...

c 指標陣列問題,C 中關於指標陣列的問題。

是錯誤的。char cchar count 宣告瞭cchar是有count個元素的陣列,每個元素都是指向char型變數的指標。但cin cchar i 卻試圖給cchar的第二個元素 指標 賦一個鍵盤值 這裡指標還沒有確定指向,是隨機的,它隨機地指向了不能寫入的地方,就要出錯。這裡應該先給指標陣列賦...

C陣列的引用做函式引數怎麼寫,c 中關於陣列作為函式引數的幾種方法

陣列名作函式引數 陣列名可以作函式的實參和形參。如 12 3456 78910 11main f int arr,int n array為實引數組名,arr為形引數組名。在學習指標變數之後就更容易理解這個問題了。陣列名就是陣列的首地址,實參向形參傳送陣列名實際上就是傳送陣列的地址,形參得到該地址後也...