C++ 指针 多维数组传递参数
来源:互联网 发布:毛概网络课程答案 编辑:程序博客网 时间:2024/05/23 22:18
数组作为函数参数,其实就是把其第一个元素地址传递给函数。
而多维数组一般都非常困惑我们,解决好多维数组参数传递也有多种实现方法,但是我觉得还是以The C++ Programming Language这本书为标准,看看如何做吧。
C++之父的建议就是不要使用数组传递参数,而是把数组用类包起来,使用STL如:array, string,vector等。如果坚持要直接使用一般数组的话,会要应付各种隐晦的bug和令人困惑的因素。
如下是一般的传递参数方法。但是一般我们并不确定数组的维数,那怎么办呢?
void print_m35(int m[3][5]){for (int i = 0; i!=3; i++) {for (int j = 0; j!=5; j++)cout << m[i][j] << '\t';cout << '\n';}}
第一维是和定位元素(本例中是3)无关的,只是告诉我们有多少个元素(本例中是int[5], 而不是int)在数组里面。
所以可以不确定第一维,如下:
void print_mi5(int m[][5], int dim1){for (int i = 0; i!=dim1; i++) {for (int j = 0; j!=5; j++)cout << m[i][j] << '\t';cout << '\n';}}
但是还不能达到我们的要求。我们的本能反应就是如下写程序:
void print_mij(int m[][], int dim1, int dim2) // doesn’t behave as most people would think{for (int i = 0; i!=dim1; i++) {for (int j = 0; j!=dim2; j++)cout << m[i][j] << '\t'; // surprise!cout << '\n';}}
可是这确是错误的。因为m[][]非法,第二维必须让编译器知道,以定位元素。
正确的做法应该是:
void print_mij(int* m, int dim1, int dim2){for (int i = 0; i!=dim1; i++) {for (int j = 0; j!=dim2; j++)cout << m[i*dim2+j] << '\t'; // obscurecout << '\n';}}
调用函数如下:
int test(){int v[3][5] = {{0,1,2,3,4}, {10,11,12,13,14}, {20,21,22,23,24}};print_m35(v);print_mi5(v,3);print_mij(&v[0][0],3,5);}
最后一个语句也可以只用v[0]代替&v[0][0],因为两者是一样的, 但是不能使用v,这是类型错误了。
最后还是建议用类封装起来,使用vector等容器。
- C++ 指针 多维数组传递参数
- C语言多维数组参数传递问题
- 传递多维数组参数(C++)
- 多维数组的指针类型转换和参数传递
- c.传递多维数组
- 多维数组 函数参数传递
- C 指针和多维数组
- [C语言]多维数组指针
- 多维动态数组作为函数传递参数
- 二维数组参数的传递,多维同理
- C指针参数传递
- C语言 指针数组 多维数组
- 指针数组 多维数组C语言
- C语言 指针数组 多维数组
- C语言 指针数组 多维数组
- 多维数组的指针做函数参数
- C专家编程 十五 使用指针向函数传递一个多维数组
- c 向函数传递多维数组
- jbtExit.addActionListener
- 关于Kinect根据深度图对齐彩色图抠人比彩色图像人大的问题
- Leetcode: Sum Root to Leaf Numbers
- 索罗斯
- JDK+TOMCAT+MYSQL图文安装教程
- C++ 指针 多维数组传递参数
- 开源 Apache 服务器安全防护技术精要及实战
- The NetBeans E-commerce Tutorial - Testing and Profiling
- 使用OEM,AWR和ADDM发现数据库性能问题-视频分享
- 国外程序员推荐:每个程序员都应读的书
- 使IE6正常显示PNG-24格式图片代码
- 经济增长的决定因素:跨国经验研究
- Leetcode: 3Sum Closest
- job、job-class、scheduler、windows