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

如现有一个结构体
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教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

Antworte allen(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...
这个初始化难于理解的原因我感觉是因为,平时我们二维数组的初始化用一个花括号括起来的时候,通常都是表示了对一行的初始化,而在这个问题里面,结构体的初始化恰好可以用花括号,导致了有一些混乱,不过这里的花括号,还是表示的对整个一行的初始化,而不是对一个的结构体元素的初始化。要对这个二维数组里面的结构体逐次初始化,就要像你那样再加层花扩号。

刘奇

你把你初始化的每一行一维数组想象成一个元素,再把整个二维数组想象成一个容纳这个元素的一维数组,就明白了。
二维数组其实就是一个一维数组的数组,你可以看成是一个嵌套了数个具有相同大小数组的数组。每个数组元素就是一个数组,所以你声明的时候,前一个数字可以没有,根据你初始化了多少个数组来决定,但是后一个数字必须有,因为必须确定每一个元素的大小。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage