給調用函數傳遞數組的元素個數的幾種有效方法

來源:互聯網
上載者:User

給調用函數傳遞數組的元素個數的幾種有效方法

 #include<iostream>
#include<vector>
using std::cout;
using std::endl;
using namespace std;

void  PutArray1(int *p,int length)
{  
 for(int ix=0;ix<length-1;ix++)
 cout<<p[ix]<<"/t";
 cout<<p[ix]<<endl;
}

void PutArray2(int p[],int length)
{

 for(int ix=0;ix<length-1;ix++)
 cout<<p[ix]<<"/t";
 cout<<p[ix]<<endl;
}

void PutArray3(int p[10])      
{
 for(int ix=0;ix<9;ix++)
 cout<<p[ix]<<"/t";
 cout<<p[ix]<<endl;
}

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

 for(int ix=0;ix<9;ix++)
 cout<<p[ix]<<"/t";
 cout<<p[ix]<<endl;
}

void PutArray5(vector<int>verc)
{
 vector<int>::iterator begin_iter=verc.begin();
 vector<int>::iterator end_iter=verc.end();

 int size=verc.size ();
 cout<<"使用兩個迭代器來輸出int向量"<<"/n"<<endl;
 for( vector<int>::iterator iter=begin_iter ;iter!=end_iter;iter++)
 cout<<*iter<<"/t";
    cout<<endl;
 cout<<"使用向量參數傳進來的元素規模輸出int向量/n"<<endl;
 for(int ix=0;ix<size-1;ix++)
 cout<<verc[ix]<<"/t";
    cout<<verc[ix]<<endl;
}

void main()
{
 int a[10]={0,1} ,b[8]={0,1};
 vector<int> verc1(a,a+10);
 vector<int> verc2(b,b+8);
 cout<<"數組a[10]調用函數PutArray1的結果為:/n"<<endl;//由此PutArray1和PutArray2和PutArray3的第一次輸出的輸出結果可以
 PutArray1(a,10);
 cout<<"數組a[10]調用函數PutArray2的結果為:/n"<<endl;//說明PutArray1(int * p)和PutArray2(int p[])以及PutArray3(int p[10]這
 PutArray2(a,10);
    cout<<"數組a[10]調用函數PutArray3的結果為:/n"<<endl;//三個函數是等價的;實參傳遞的都是int *p;他們的元素個數都不作為實參內容傳進
 PutArray3(a);                                                 
    cout<<"數組b[8]調用函數PutArray3的結果為:/n"<<endl; //函數。
 PutArray3(b);
    cout<<"向量verc1調用函數PutArray5的結果為:/n"<<endl;
 PutArray5(verc1);
    cout<<"向量verc2調用函數PutArray5的結果為:/n"<<endl;
    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向量來代替數組

*/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.