【C++基础之十六】数组传参
来源:互联网 发布:保利地产待遇 知乎 编辑:程序博客网 时间:2024/05/16 07:34
1.一维数组
数组作为传参,其实传入的只是数组的首地址。实质上也是值拷贝。调用函数内部会有一个备份,这个备份指向了数组的首地址,所以数组元素可以在调用函数中被改变。由于调用函数只知道数组的首地址,并不知道数组元素的个数,所以一般我们将数组元素个数也传入。
第一种实现:
指定数组长度。
int sum(int array[3]);//指定数组长度int sum(int array[3]){int value=0;for(int i=0;i<3;i++){value+=array[i];}return value;}void _tmain(int argc, _TCHAR* argv[]){int array[3]={1,2,3};cout<<sum(array);}
第二种实现:
传入数组首地址和长度。
int sum(int array[],int n);//传入数组首地址和长度int sum(int array[],int n){int value=0;for(int i=0;i<n;i++){value+=array[i];}return value;}void _tmain(int argc, _TCHAR* argv[]){int array[3]={1,2,3};cout<<sum(array,3);}
第三种实现:
因为数组传参实际传入的也是指针,所以我们还可以这么写。int sum(int *p,int n);//传入数组的首地址,即指针int sum(int *p,int n){int value=0;for(int i=0;i<n;i++){value+=*(p+i);}return value;}void _tmain(int argc, _TCHAR* argv[]){int array[3]={1,2,3};cout<<sum(array,3);}
2.多维数组
在内存中没有所谓的多维数组,它也是按照一维排列的。所以实质上传入的多维数组首地址其实也是指针。
第一种实现:
指定了行列数。
int sum(int array[2][2]);//指定数组的行列int sum(int array[2][2]){int value=0;for (int i=0;i<2;i++){for(int j=0;j<2;j++){value+=array[i][j];}}return value;}void _tmain(int argc, _TCHAR* argv[]){int array[2][2]={{1,2},{3,4}};cout<<sum(array);}
第二种实现:
指定列宽并且传入行数。注意,第二维必须指定!
int sum(int array[][2],int row);//指定列宽并传入行数int sum(int array[][2],int row){int value=0;for (int i=0;i<row;i++){for(int j=0;j<2;j++){value+=array[i][j];}}return value;}void _tmain(int argc, _TCHAR* argv[]){int array[2][2]={{1,2},{3,4}};cout<<sum(array);}
第三种实现:
传入数组首地址和行列数。当成一维数组来处理。
int sum5(int* p,int row,int col);//数组首地址和行列数int sum5(int* p,int row,int col){int value=0;for (int i=0;i<row;i++){for(int j=0;j<col;j++){value+=*(p+col*i+j);}}return value;}void _tmain(int argc, _TCHAR* argv[]){int array[2][2]={{1,2},{3,4}};cout<<sum(array);}
第四种实现:
传入行指针以及行数。
int sum(int (*array)[2],int row);//传入行指针和行数int sum(int (*array)[2],int row){int value=0;for (int i=0;i<2*row;i++){value+=(*array)[i];}return value;}void _tmain(int argc, _TCHAR* argv[]){int array[2][2]={{1,2},{3,4}};cout<<sum(array,2);}
- 【C++基础之十六】数组传参
- C基础之数组
- C语言基础之数组
- C基础之柔性数组
- C语言基础之数组
- Objective-C基础之数组
- Objective-C基础之数组
- C语言基础之数组
- C语言基础之数组
- C语言基础之数组
- CSS:CSS基础之十六
- XSL:XSL基础之十六
- 网络安全基础篇之<十六>
- Java基础之十六:GUI基础
- C语言入门教程 (十六) 数组和指针
- C语言程序设计基础讲座之数组
- c语言基础例题之字符数组
- C语言基础之数组、字符串、指针
- 学acm必看 请不要做浮躁的人
- 29讲 apache服务器使用及配置④ apache虚拟主机 web访问时序图
- 《#诗盗#~研发客》
- 经典排序算法
- C#中linq 分组查询
- 【C++基础之十六】数组传参
- sql 获取当前毫秒时间
- Timer
- 合并两个有序链表形成一个新的有序链表
- ASIHTTPRequest使用过程中遇到的问题及解决办法
- 几种c/c++中字符串转整形的方法
- poj1444
- poj2028 When Can We Meet?
- 百度2014校招笔试题(二)