C/C++二维数组的用法

二维数组在存储时按行优先连续存储,数组名是一个二维指针,如 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]= "<<a[0][0];
cout<<"a[1][2]= "<<a[1][2];
复制代码

 结果为:

a[0][0]= 11
a[1][2]= 26

二. 将函数的返回值定义为二维数组指针类型,这样返回的就是真正的二维数组。而这种方式也有两种:
1. 如下,函数返回的是一个二维数组指针,而这个二维数组的规格是 int arr[][2]
复制代码
#include <stdio.h>  
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 <stdio.h>  
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

猜你喜欢

转载自blog.csdn.net/eric_e/article/details/80586011