C++传递二维数组
来源:互联网 发布:java小游戏制作教程 编辑:程序博客网 时间:2024/06/03 18:55
原文地址:http://blog.csdn.net/iamduoluo/article/details/5936763
c++之所以强大,其中重要原因之一就是支持指针,然而这也是c++最令人头痛的问题之一,其中二维数组作为参数传递就是其中之一。
一、关于一维数组
C++中一维数组作为函数参数传递应用十分普遍,原理和操作都十分简单。数组名就代表了数组的首地址,下标就是偏移量。函数的形式参数声明为一级指针即可(Type *),而实参就是数组名。
二、扩展到二维数组
一维的情况解决了,接下来扩充到二维的情形。思路同前,采用二级指针引用二维数组(Type**)从而得到如下程序:
#include "stdafx.h"#include<iostream>using namespace std;void test(int m[][15],int i,int j){ for(int a=0;a<i;a++){ for(int b=0;b<j;b++){ m[a][b] = b; } }}int print(int m[][15],int i,int j){ for(int a=0;a<i;a++){ for(int b=0;b<j;b++){ cout<<m[a][b]<<","; } cout<<endl; } return 0;}int _tmain(int argc, _TCHAR* argv[]){ int m[15][15],i,j; i = 15;j = 15; test(m,i,j); print(m,i,j); return 0;}
可是对上边的程序进行编译却会报告错误: 错误 1 error C2664: “test”: 不能将参数 1 从“int [15][15]” 转换为“int **”
呵呵,问题来了吧,不能将这个二维数组转化而二级指针。好,既然这样,那我就把形参声明为二维数组而不是二级指针。对左边函数声明修改如下:
void test(int **m,int i,int j) 改为:
void test(int m[][],int i,int j)
可是这样一来有出现了新的问题: 不能将参数 1 从“int [15][15]” 转换为“int [][1]
原来数组大小匹配不了,于是很容易想到将地二维大小明确给出,而不是缺省值。
void test(int m[][15],int i,int j)
OK 搞定!
上面的解决方案虽然解决了燃眉之急,但毕竟不优雅,因为作为函数你必须保证声明了足够大的空间,但是究竟多大才是安全的呢?谁也不知道。下面的解决方案就优雅得多了。
#include "stdafx.h"#include<iostream>using namespace std;void test(int **m,int i,int j){ for(int a=0;a<i;a++){ for(int b=0;b<j;b++){ m[a][b] = b; } }}int print(int **m,int i,int j){ for(int a=0;a<i;a++){ for(int b=0;b<j;b++){ cout<<m[a][b]<<","; } cout<<endl; } return 0;}int _tmain(int argc, _TCHAR* argv[]){ int **m,i,j; i = 15;j = 15; m = new int*[i]; for(int c=0;c<i;c++) m[c] = new int[j]; test(m,i,j); print(m,i,j); return 0;}
- C/C++传递二维数组
- c语言传递二维数组
- c传递二维数组参数
- C函数传递二维数组
- C/C++--定义二维数组及二维数组的传递
- c/c++:二维数组作为参数传递
- C语言中二维数组传递参数
- C/C++ 中二维数组的传递
- C/C++如何传递二维数组?
- C/C++如何传递二维数组?
- C/C++函数如何传递二维数组
- C语言函数二维数组传递方法
- C/C++如何传递二维数组?
- c语言中二维数组的传递
- C语言:函数二维数组传递方法
- C语言函数二维数组传递方法
- c语言二维数组的传递
- c语言:二维数组传递方法
- Hibernate防止sql注入对参数赋值传参数的例子
- 二叉平衡树树的实现
- week15
- 动态生成RadioGroup
- Timesten 快捷加载oracle数据库中的表和数据
- C++传递二维数组
- jsp注释
- 苹果的编程语言--Swift
- 动态规划--背包
- Discrete Roots
- 猴子选大王问题(约瑟夫环)
- Java--xml文件的解析
- ACdream 少了哪个妹子?( 签到)
- php Laravel 添加自定义类和函数