C++中结构体的 二维数组 初始化方法和顺序是怎样的?
高洛峰
高洛峰 2017-04-17 14:26:48
0
2
648

如现有一个结构体
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行。。。我觉得不理解。。。也不确定源码有没有错误。有没有人能帮忙解答?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回覆(2)
PHPzhong

把那個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...
這個初始化難於理解的原因我感覺是因為,平時我們二維數組的初始化用一個花括號括起來的時候,通常都是表示了對一行的初始化,而在這個問題裡面,結構體的初始化恰好可以用花括號,導致了有一些混亂,不過這裡的花括號,還是表示的對整個一行的初始化,而不是對一個的結構體元素的初始化。要對這個二維數組裡面的結構體逐次初始化,就要像你那樣再加層花擴號。

刘奇

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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!