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

2021-06-25 14:48:37 字數 2221 閱讀 2715

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 中傳值引數和引用引數怎樣區別?

舊事重提,看以下例子 include using namespace std void swap int a,int b main main 引用可以看作是乙個變數的別名,使用 引用 時 對於void swap int a,int b 編譯器並沒有給形參a,b分配新的記憶體空間,只是使 形參a,b指...

在c中如何將陣列型別和長度作為引數傳入

陣列型別可以自定義巨集 比如 int 定義成 1,char 定義成 2 define typeint 1 長度,是多少就傳多少唄。ps 完全不理解你為什麼要把陣列型別和長度傳成引數幹嘛用 function t t,int length 給陣列賦值的時候就可計算出陣列的長度.你要實現什麼功能,如果說僅...

C字元陣列和字串陣列,在C中字元陣列和字串有什麼區別

實際上,字元陣列和普通陣列一樣,沒有本質區別。請大家注意陣列型別的含義 資料型別指的是陣列所包含的元素的型別,而不是陣列名的型別,陣列名永遠是乙個指標,指向第乙個元素的位址,即陣列首位址。字元陣列的每個元素都是char型別,整型陣列的每個元素都是int型別。scanf 和 printf 函式有一種格...