【005:二維數組問題】


005:二維數組問題

在 C/C++ 中,我們將使用兩個下標的數組稱之為二維數組。相比於一維數組中,下標作為索引的存在,二維數組的下標索引往往帶有 的意義。如表示一個四邊形的四個二維坐標(x,y)這樣的場景,就可以使用二維數組進行存儲(使用結構體表示一個點的 x/y 坐標也是可以的)。

1. 二維數組的初始化

方式一:指定數據初始化

int a[3][2] = {0, 1, 2, 3, 4, 5}; // -Wmissing-braces
int a[3][2] = {{0, 1}, {2, 3}, {4, 5}};

方式二:默認初始化

int a[3][2] = {0}; // 全為0
int b[3][2] = {};  // 全為0
int c[3][2];       // 全為隨機數

2. 二維數組的訪問

方式1:下標式

#include <stdio.h>

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

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

    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 2; j++)
        {
            printf("a[%d][%d]=%d\n", i, j, a[i][j]);
        }
    }

    return 0;
}

方式二: 指針式

#include <stdio.h>

#include <stdio.h>

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

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

    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 2; j++)
        {
            printf("a[%d][%d]=%d\n", i, j, *(*(a + i) + j));
        }
    }
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 2; j++)
        {
            printf("a[%d][%d]=%d\n", i, j,*(&a[0][0] + i * 2 + j));
        }
    }
    return 0;
}

3. 指針式訪問說明

對於指針式訪問有兩種寫法,對應於數組地址+1數組名+1 這兩種關系。

對於數組名訪問的方式:

  • a+i 類型為 int (*)[2]
  • *(a+i) 類型為 int *
  • (*(a+i)+j) 類型為 int *

而使用數組地址訪問,直接按照線性關系移動即可。


免責聲明!

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



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