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

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

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陣列可以通過值引數和引用引數兩種方式傳遞給函式”的說法對否

不對。int,char或者自定義的類可以通過值引數和引用引數兩種方式傳遞給函式,陣列不行。陣列是兩種指標傳遞 void sort int a 對於指標a來說是值傳遞,對於陣列來說是指標傳遞 void sort int a 100 這種方法類似於引用,但實質上還是指標傳遞 謝3哥 當然對了 1,引用 ...

C什麼是引數陣列,C 什麼是函式的引數陣列?

c 語言規範 10.5.1.4 引數陣列 用 params 修飾符宣告的引數是引數陣列。如果形參表包含一個引數陣列,則該引數陣列必須位於該列表的最後而且它必須是一維陣列型別。例如,型別 string 和 string 可用作引數陣列的型別,但是型別 string 不能。不可能將 params 修飾符...

C 中函式引數問題,C 模板中函式引數問題

void visit bintreenode t 用左 右 左讀法 1 visit 往左讀,是 於是 visit 是指標2 再接著往右讀,是 3 再往左,是 4 再往右是 bintreenode t 括號中有變數宣告,是函式引數定義 5 再往左讀,是 void,函式返回值 所以,visit 是一個指...