假设我有以下类型的结构:
struct employee
{
int emp_id;
int name_len;
char name[0];
};
我知道
struct employee *e = malloc(sizeof(*e) + sizeof(char) * 128);
相当于
struct employee
{
int emp_id;
int name_len;
char name[128]; /* character array of size 128 */
};
我的问题是,当结构中的最后一个元素是struct hack时,我可以创建这样的结构数组吗?
示例:我想创建一个结构数组employee [3];那么
员工[0]可以等同于
struct employee
{
int emp_id;
int name_len;
char name[128]; /* character array of size 128 */
};
员工[1]可以等同于
struct employee
{
int emp_id;
int name_len;
char name[256]; /* character array of size 256 */
};
员工[2]可以等同于
struct employee
{
int emp_id;
int name_len;
char name[512]; /* character array of size 512*/
};
答案 0 :(得分:4)
不,你不能这样做,出于各种原因,但你可以创建一个像:
这样的数组struct employee *all[...];
如果你不这样做,你需要:
struct employee {
...
char *name;
}
...您需要动态分配每个name
并分配。
如果你考虑一下,数组中的每个元素都必须是相同的长度。如果没有,它怎么能被索引?此外,必须在编译时知道该长度。
但是如果每个employee
元素都是一个指针,那么你可以使用struct hack使每个元素的大小不同,具体取决于name[]
需要多少空间。