c++中关于数组作为函数参数并传递数组元素个数的几种有效方法的讨论
2014-05-06 17:13
911 查看
//由于数组的元素个数默认情况下是不作为实参内容传入调用函数的,本程序用来讨论有此带来的
//相关问题,以及解决问题方法,即给调用函数传递数组的元素个数的几种有效方法并实现它
(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向量来代替数组
传送门:http://wenku.baidu.com/link?url=yvjE8Av93bGhnjIWjwUHUJ6WAjfbOW-qOT5Q85nTXCOakPW9b4TB-DVmHQb3cHeTBYl0ThMxbWbvZcWkb3Ze84lSu_S-bVlygkIMH8n_4Mu
//相关问题,以及解决问题方法,即给调用函数传递数组的元素个数的几种有效方法并实现它
#include<iostream> #include<vector> #include <stdlib.h> using namespace std; void PutArray1(int *p,int length) { int ix = 0; for(;ix<length-1;ix++) cout<<p[ix]<<" "; cout<<p[ix]<<endl; } void PutArray2(int p[],int length) { int ix = 0; for(;ix<length-1;ix++) cout<<p[ix]<<" "; cout<<p[ix]<<endl; } void PutArray3(int p[10]){ int ix = 0; for(;ix<9;ix++) cout<<p[ix]<<" "; cout<<p[ix]<<endl; } void PutArray4(int (&p)[10]){//注意对int数组的引用是int (&a)[10],而不是int & a[10],否则有编译错误 int ix = 0; for(;ix<9;ix++) cout<<p[ix]<<" "; 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<<" "; cout<<endl; cout<<"使用向量参数传进来的元素规模输出int向量\n"<<endl; int ix=0; for(;ix<size-1;ix++) cout<<verc[ix]<<" "; cout<<verc[ix]<<endl; } int 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); system("pause"); }
(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向量来代替数组
传送门:http://wenku.baidu.com/link?url=yvjE8Av93bGhnjIWjwUHUJ6WAjfbOW-qOT5Q85nTXCOakPW9b4TB-DVmHQb3cHeTBYl0ThMxbWbvZcWkb3Ze84lSu_S-bVlygkIMH8n_4Mu
相关文章推荐
- c++中关于数组作为函数参数并传递数组元素个数的几种有效方法的讨论
- c++中关于数组作为函数参数并传递数组元素个数的几种有效方法的讨论
- 数组作为函数参数并传递数组元素个数的几种有效方法
- c++中关于数组作为函数参数的几种方法
- 数组作为函数参数的传递方法
- 给调用函数传递数组的元素个数的几种有效方法
- C++中关于二维数组作为函数参数传递的问题
- 2.关于结构体以及结构体数组作为函数入口参数的方法(学习笔记)
- C++中关于将fstream对象作为函数参数传递相关问题说明
- VB几种函数参数传递方法,Variant,数组,Optional,ParamArray
- VB几种函数参数传递方法,Variant,数组,Optional,ParamArray
- C++中关于二维数组作为函数参数传递的问题
- 关于将数组作为参数传递给函数的简单使用
- C++学习笔记(四)——关于数组作为函数参数的值传递和引用传递
- [C++]关于指针作为函数参数传递
- c++之指针作为函数参数传递的问题
- 二维数组作为函数参数的几种方法
- C语言中数组名作为参数进行函数传递
- c++之指针作为函数参数传递的问题
- 关于指针作为函数参数传递的理解,对比普通变量作为函数参数的需注意点,其实就是行参和实参的问题。