1. 程式人生 > >靜態二維陣列和動態二維陣列(C語言)

靜態二維陣列和動態二維陣列(C語言)

1、理解什麼是靜態二維陣列和動態二維陣列

靜態二維陣列:可以理解為程式中如定義的陣列(定義一個3行4列的靜態二維陣列)

int [3][4] = {{1,1,1,1}, {2,2,2,2}, {4,4,4,4}};

動態二維陣列:可以理解為程式中如下定義的陣列(定義一個3行4列的動態二維陣列)

#include<stdio.h>
#include<stdlib.h>

#define ROWS 3
#define COLS 4

int main(int argc, char *argv[]) {

    int **ppi = NULL; //定義整形二維陣列指標變數
    int i;

    ppi = (int **)malloc( ROWS * sizeof(int));//為3行4列動態二維陣列每行的首地址分配記憶體


    for (i=0; i<ROWS; i++)
    {
        ppi[i] = (int *)malloc( COLS * sizeof(int));//為3行4列動態二維陣列每行分配記憶體

        ppi[i][0] = i;
        ppi[i][1] = i;
        ppi[i][2] = i;
        ppi[i][3] = i;
    }

    for (i=0; i<ROWS; i++)
    {
        printf("第%d行:%d ", i, ppi[i][0]);
        printf("%d ", i, ppi[i][1]);
        printf("%d ", i, ppi[i][2]);
        printf("%d\n", i, ppi[i][3]);
    }
                                                                                                       
    return 0;                                                                                          
}  

2、靜態二維陣列記憶體佈局

圖示說明:

1)靜態二維陣列實質是一個數組,記憶體空間也是連續的

2)ppi是靜態二維陣列變數,指向二維陣列首地址

3)ppi+0:指向靜態二維陣列第1行首地址

4)ppi+1:指向靜態二維陣列第2行首地址

4)ppi+2:指向靜態二維陣列第3行首地址


3、動態二維陣列記憶體佈局

圖示說明:

1)ppi是動態二維陣列變數,執行二維陣列首地址

2)ppi[0]、ppi[1]、ppi[2]分別為每行的首地址