我已经看到一些创建结构的C代码,并且在结构中有许多数组。其中一些阵列的大小为1。那么为什么还要把它变成一个阵列呢?为什么不只是一个int?
我正在谈论这样的事情:
struct Foo
{
uint8_t Bar[1];
uint32_t BigBar[4];
};
为什么不做到只是
struct Foo
{
uint8_t Bar;
uint32_t BigBar[4];
};
答案 0 :(得分:3)
答案是这样做有很好的编程习惯,原因有两个:
如果程序员决定在某个时刻将Bar更改为数组,则代码不会发生很多变化。所有需要做的就是将常数从1更改为ARRAY_SIZE(实际上将常量定义为一个更好)
使用构造相同的字段比不同的字段更不容易出错。有思想的程序员是犯错误的人:)
干杯
答案 1 :(得分:1)
我的猜测是更容易返回一个指针:
将指针返回到变量将更容易:Bar
如果你想将它用作指针,你可以传递Bar而不是&Bar
如果它是一个int
如果我有一个定义的结构实例: struct Foo aaa;
你可以定义:
int *pInt = aaaa.Bar;
而不是:
int *pInt = &(aaaa.Bar);
答案 2 :(得分:1)
与其他结构的一致性?
struct alien {
int heads[3];
...
};
struct human {
int heads[1];
...
};