C++: 二维数组作函数参数
来源:互联网 发布:知乎专栏稿费 编辑:程序博客网 时间:2024/06/05 22:36
有两种类型的二维数组:
维数固定
这一类的数组存放在栈上,是连续存储的。任意维度固定的多维数组都可以看做是一维数组,可以用a[i+j*n]的形式来访问。
- int ia[2][2] = {2,3,4,5}; //4个元素时连续排列的内存段
- //void f(int p[][2], int row, int col )//这种方式必须事先知道除第一维以外的维度的大小,不灵活
- void f(int *p , int row, int col )//转化为一维数组来访问
- {
- for(int i = 0; i < row; i++)
- {
- for(int j =0 ;j < col; j++)
- {
- cout<<p[i*col+j]<<" ";
- }
- }
- cout<<endl;
- }
下面的代码是错误的:
- int ** p= ia;//ia的类型是char (*)[2],而不是**int
这是因为,**p指向首地址,因为int **p一次解引用为地址指针,而非堆上的指向数组的指针,所以二次解引用会出错。
动态数组
这类数组存放在堆上。只有每行内是连续排列,各行并不一定连续排列。
- int **p = new int*[2]; //只有每行内是连续排列,各行并不一定连续排列
- for ( int i = 0; i < 2; i++ )
- {
- p[i] = new int[2];
- }
- for ( int i = 0; i < 2; i++ )
- {
- for ( int j = 0; j < 2; j++ )
- {
- p[i][j] = ia[i][j];
- }
- }
这类数组的访问,可以传递多维指针(这里是二维**p)和维度,直接用a[i][j]访问。
- void f(int **p , int row, int col )
- {
- for(int i = 0; i < row; i++)
- {
- for(int j =0 ;j < col; j++)
- {
- cout<<p[i][j]<<" ";
- }
- }
- cout<<endl;
- }
变量在作用域里面被声明的是什么类型,就当作什么类型来用。
(1)参数是二维数组,但是要指定第二维的维数。
int array[10][10];
函数声明:void fuc(int a[][10]);
函数调用:fuc(array);
——在函数fuc中,a是二维数组。使用a[i][j]形式来访问数组中元素。
(2)参数使用一维指针数组。
int *array[10];
for(i = 0; i < 10; i++)
array[i] = new int[10];
函数声明:void fuc(int *a[10]);
函数调用:fuc(array);
——在函数fuc中,a是一维指针数组。使用*(a[i] + j)形式来访问数组中元素。
(3)参数使用指针的指针。
int **array;
array = new int *[10];
for(i = 0; i <10; i++)
array[i] = new int[10];
函数声明:void fuc(int **a);
函数调用:fuc(array);
——在函数fuc中, a是指针的指针。使用*(int *)(a + i*d2 + j)形式来访问数组中元素。其中:
a[0]<=>array[0][0],
a[1]<=>array[0][1],
…
a[10]<=>array[1][0]
注:d2为二维数组的二维维数,即列数。并且a + i*d2 + j为地址,所以要把这个类型为指针的指针的地址强制转换为指针来使用。
- C++: 二维数组作函数参数
- C++: 二维数组作函数参数
- C++: 二维数组作函数参数
- C++: 二维数组作函数参数
- C++: 二维数组作函数参数
- C++: 二维数组作函数参数
- C++: 二维数组作函数参数
- 二维数组作函数参数
- 二维数组作函数参数
- 二维数组作函数参数
- 二维数组指针,二维数组作参数函数调用简单实例(c/c++)
- 二维数组作函数的参数问题
- 二维数组作函数参数传递
- 二维数组和二维指针 作函数参数
- c语言 数组作函数参数
- C语言用数组作函数参数
- 二维数组作函数参数及返回值
- 二维数组作函数参数以及返回值
- 解决 Ubuntu 下没有命令或软件问题
- Red5入门教程
- windows 7 下 网络爬虫(蜘蛛)Scrapy 安装
- hdu3790——最短路径问题
- CSS中margin属性值的含义
- C++: 二维数组作函数参数
- 怎么样做好一个图片站
- 几行代码轻松实现网页视频聊天
- Activity 的属性之android:screenOrientation
- SQL中EXISTS的用法
- 关于int全区变量读写的原子性
- tomcat多个端口的使用
- 浅谈堆
- Red5研究