二维数组在存储时按行优先连续存储,数组名是一个二维指针,如 int a[3][2] 中,a 是一个二维指针,而a[0],a[1],a[2]都相当于普通的一位数组的数组名,是一个固定值的指针。
二维数组在声明的时候可以直接全部赋值,如:
int a[2][3]={0};
//All elems are 0
int a[2][3] ={1,2,3,4,5,6};
Or
int a[2][3] ={ {1,2,3}, {4,5,6} };
也可以在声明时部分赋值,如:
int a[3][3] ={ {1,2}, {4,5,6}, {} };
不能先声明再全部赋值,如下方式是错误的:
int a[2][3]; a[2][3]={ {1,2,3}, {4,5,6} };
二维数组作为函数的“返回值”,有两大类
一. 外部二维数组作为函数参数传进来,本函数对其的操作在函数外也有效(因为二维数组的名称同一位数组一样,也是一个固定值的指针),其实这个不算是函数的返回值,如:
int a[2][3] ={ {1,2,3}, {4,5,6} };
void add(int b[][3])
{
a[0][0] += 10;
a[1][2] +=20;
}
cout<<"a[0][0]= "
【C/C++二维数组的用法】 结果为:
a[0][0]= 11
a[1][2]= 26
二. 将函数的返回值定义为二维数组指针类型,这样返回的就是真正的二维数组。而这种方式也有两种:
1. 如下,函数返回的是一个二维数组指针,而这个二维数组的规格是 int arr[][2]
#include int (*fun(int b[][2]))[2] { return b; // return a 2_dim array pointer }int main() { int i,j; int a[2][2]={1,2,5,6}; int (*c)[2]; //c is a pointer variable of 2-dim array c = fun(a); for(i=0; i<2; i++) for(j=0; j<2; j++) printf("%d ",c[i][j]); return 0; }
2. 用 typedefine 类型定义,可以增加程序的可读性
#include typedef int (*R)[2]; // R is a new data type! R fun(int b[][2]) { return b; } int main() { int i,j; int a[2][2] = {1,2,5,6}; R c; c = fun(a); for(i=0; i<2; i++) for(j=0; j<2; j++) printf("%d ",c[i][j]); return 0; }
转载于:https://www.cnblogs.com/ustcysl/p/5571826.html
推荐阅读
- c/c++|有感 Visual Studio 2015 RTM 简介 - 八年后回归 Dot Net,终于迎来了 Mvc 时代,盼走了 Web 窗体时代...
- C/C++|C/C++ basis 02
- Qt实战|Qt+OpenCV联合开发(二十一)--图像翻转与旋转
- Qt实战|Qt+OpenCV联合开发(十四)--图像感兴趣区域(ROI)的提取
- Qt实战|Qt+OpenCV联合开发(十三)--通道分离与合并
- opencv|Qt+OpenCV联合开发(十六)--图像几何形状绘制
- Qt实战|Qt+OpenCV联合开发(十七)--随机数与随机颜色
- SNAT的MASQUERADE地址选择与端口选择
- IPTABLES的连接跟踪与NAT分析
- IPVS分析