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;  
} 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM