c 中關於陣列作為函式引數的幾種方法

2021-07-23 22:42:44 字數 2048 閱讀 2638

//由於陣列的元素個數預設情況下是不作為實參內容傳入呼叫函式的,本程式用來討論有此帶來的

//相關問題,以及解決問題方法,即給呼叫函式傳遞陣列的元素個數的幾種有效方法並實現它

#include

#include

using namespace std;

void putarray1(int *p,int length)

void putarray2(int p,int length)

void putarray3(int p[10]) 

void putarray4(int (&p)[10])//注意對int陣列的引用是int (&a)[10],而不是int & a[10],否則有編譯錯誤

void putarray5(vectorverc)

void main()

,b[8]=;

vectorverc1(a,a+10);

vectorverc2(b,b+8);

cout<<"陣列a[10]呼叫函式putarray1的結果為:\n"《由此putarray1和putarray2和putarray3的第一次輸出的輸出結果可以

putarray1(a,10);

cout<<"陣列a[10]呼叫函式putarray2的結果為:\n"《說明putarray1(int * p)和putarray2(int p)以及putarray3(int p[10]這

putarray2(a,10);

cout<<"陣列a[10]呼叫函式putarray3的結果為:\n"《三個函式是等價的;實參傳遞的都是int *p;他們的元素個數都不作為實參內容傳進

putarray3(a); 

cout<<"陣列b[8]呼叫函式putarray3的結果為:\n"《函式。

putarray3(b);

cout<<"向量verc1呼叫函式putarray5的結果為:\n"<

putarray5(verc1);

cout<<"向量verc2呼叫函式putarray5的結果為:\n"<

putarray5(verc2); }

/*(1)對於陣列a[10]作為實參,對所有的以陣列作為實參的函式的呼叫得用putarray3(a),

而不能用putarray3(a[10])和putarray(a)

否則出現編譯錯誤,

這是由於陣列的大小不作為實參的內容傳遞的原因

前者出現

error c2664: 'putarray3' :

cannot convert parameter 1 from 'int' to 'int '

後者出現

error c2059:

syntax error : ']'

的提示。

(2)注意對putarray3(b)的呼叫,宣告裡面形參為int[10],呼叫的時候傳入的實參為int [8],

卻能夠編譯成功,有利的證明了陣列實參的元素個數確實是不作為實參的內容傳入函式的

執行也沒有什麼錯誤,

傳人的八個元素,顯示的確實十個,後面兩個是隨機的,實際是不屬於

陣列b的內容的,所以此處容易出現潛在的陣列越界錯誤

(3)當

呼叫putarray4(b)的時候,由於實參是對陣列的引用

,它的元素個數是作為實參的一部分

傳入函式的,所以當呼叫putarray4(b)的時候,出現如下的編譯錯誤:

error c2664: 'putarray4' :

cannot convert parameter 1 from 'int [8]' to 'int (&)[10]'

(4)putarray5(verc1)和putarray(verc2)的呼叫是為了練習對vector和iterator的使用,同時說明了

vector容器型別作為實參的方法也可以用來傳遞陣列的元素個數。

總結:可以用來傳遞陣列元素個數的方法有如下3種:

(一)用兩個實參,乙個是陣列名,乙個是指出它的長度

(二)使用對陣列的引用,此時它的陣列元素是作為實參傳入函式的

(三)使用vector向量來代替陣列

詳談C 中陣列作為函式引數

執行以下 請問輸出是什麼?例子 於 劍指offer 我對書上例子做了修改,讓其可以執行。include using namespace std int getsize int data int main int size1 sizeof data1 int data2 data1 int size2...

C 中,物件作為函式引數的幾種情況

passing objects to functions 物件作為函式引數 objects as function arguments 物件作為函式引數 you can pass objects by value or by reference.物件作為函式引數,可以按值傳遞,也可以按引用傳遞 1 ...

C語言陣列作為函式引數

一 陣列元素作為函式的實參 陣列元素就是變數,與普通變數沒有區別,將陣列元素傳送給形參,實現單向的值傳遞。include float max float x,float y int main int m a 0 for int i 1 i 6 i printf 陣列中的最大元素是 d m 二 陣列名...