Heim > Fragen und Antworten > Hauptteil
如现有一个结构体
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行。。。我觉得不理解。。。也不确定源码有没有错误。有没有人能帮忙解答?
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...
这个初始化难于理解的原因我感觉是因为,平时我们二维数组的初始化用一个花括号括起来的时候,通常都是表示了对一行的初始化,而在这个问题里面,结构体的初始化恰好可以用花括号,导致了有一些混乱,不过这里的花括号,还是表示的对整个一行的初始化,而不是对一个的结构体元素的初始化。要对这个二维数组里面的结构体逐次初始化,就要像你那样再加层花扩号。
怪我咯2017-04-17 14:28:48
你把你初始化的每一行一维数组想象成一个元素,再把整个二维数组想象成一个容纳这个元素的一维数组,就明白了。
二维数组其实就是一个一维数组的数组,你可以看成是一个嵌套了数个具有相同大小数组的数组。每个数组元素就是一个数组,所以你声明的时候,前一个数字可以没有,根据你初始化了多少个数组来决定,但是后一个数字必须有,因为必须确定每一个元素的大小。