首頁  >  問答  >  主體

C++中结构体的 二维数组 初始化方法和顺序是怎样的?

如现有一个结构体
typedef struct
{
uint8_t a;
uint8_t b[10];
uint8_t c[3];
}basic;

而定义一个二维数组
basic array[][5],如何对其初始化?

是这样吗:
basic array[][4]=
{
{1,0,0},
{2,0,0},
{3,0,0,0,1},
{2,2,1,2,2},
{3,1,1,4,2,2,4},
}
如果按这样初始化,
array的array0,array0,...array2...
分别都是什么呢?
array一共有几行呢?
我看到一个源码里面的意思好像是,这样初始化过后,array有5行。。。我觉得不理解。。。也不确定源码有没有错误。有没有人能帮忙解答?

高洛峰高洛峰2765 天前680

全部回覆(2)我來回復

  • PHPz

    PHPz2017-04-17 14:28:48

    把那個struct當成一個普通的int[14]理解就好啦,就是二維數組的初始化,你可以像這樣打印出來看看。

    #include <iostream>
    
    using namespace std;
    
    typedef struct
    {
        uint8_t a;
        uint8_t b[10];
        uint8_t c[3];
    }basic;
    
    int main()
    {
        basic array[][4]=
        {
            {1,0,0},
            {2,0,0},
            {3,0,0,0,1},
            {2,2,1,2,2},
            {3,1,1,4,2,2,4},
        };
        for (int i = 0; i < 5; ++i)
        {
            cout << (unsigned int)array[i][0].a << endl;
        }
        basic test[][5] =
        {
            {{1,0,0},
            {2,0,0},
            {3,0,0,0,1},
            {2,2,1,2,2},
            {3,1,1,4,2,2,4}}
        };
        for (int i = 0; i < 5; ++i)
        {
            cout << (unsigned int)test[0][i].a << " ";
        }
        cout << endl;
        return 0;
    }
    

    因為uint8_t是unsigned char的typedef,所以才轉換成unsigned int輸出。 。 。 。
    這裡有篇博文介紹了二維數組的初始化http://blog.csdn.net/chenshij...
    這個初始化難於理解的原因我感覺是因為,平時我們二維數組的初始化用一個花括號括起來的時候,通常都是表示了對一行的初始化,而在這個問題裡面,結構體的初始化恰好可以用花括號,導致了有一些混亂,不過這裡的花括號,還是表示的對整個一行的初始化,而不是對一個的結構體元素的初始化。要對這個二維數組裡面的結構體逐次初始化,就要像你那樣再加層花擴號。

    回覆
    0
  • 怪我咯

    怪我咯2017-04-17 14:28:48

    你把你初始化的每一行一維數組想像成一個元素,再把整個二維數組想像成一個容納這個元素的一維數組,就明白了。
    二維數組其實就是一個一維數組的數組,你可以看成是一個嵌套了數組具有相同大小數組的數組。每個數組元素就是一個數組,所以你聲明的時候,前一個數字可以沒有,根據你初始化了多少個數組來決定,但是後一個數字必須有,因為必須確定每一個元素的大小。

    回覆
    0
  • 取消回覆