gpt4 book ai didi

c - 非同质数组的内存分配是如何工作的?

转载 作者:行者123 更新时间:2023-11-30 15:05:30 25 4
gpt4 key购买 nike

使用 union ,我们当然可以拥有一个包含不同数据类型元素的数组。

例如

struct elements { 
int s;
union {
int ival;
float fval;
char *pval;
} element;
};
struct darray {
struct elements items[100];
};

现在,我们可以声明一个可以包含不同数据类型元素的数组:

struct darray a;

令我困扰的是: union 体一次只能存在一个成员,但我们已经得到了一个包含 100 个元素的数组。这些元素没有初始化,但是不应该在这里分配内存吗?

内存分配在此类数组中如何工作?

最佳答案

该数组是同质的,但它的内容包含一个 union ,可以使用相同的底层内存表示不同的类型。

每个元素都是它自己的对象,有它自己的成员和元素。

您可以自由地为不同的元素分配不同的类型:

enum
{
INT ,
FLOAT ,
STRING ,
} ;

struct darray a;
a.items[0].s = INT;
a.items[0].element.ival = 12345;
a.items[1].s = FLOAT;
a.items[1].element.fval = 4.56F;
a.items[2].s = STRING;
a.items[2].element.pval = "string literal";

printf( "%d %f %s\n" , a.items[0].element.ival ,
a.items[1].element.fval ,
a.items[2].element.pval );

您还可以简单地定义一个 struct 类型元素数组,而不是将类型 struct 元素包装到 struct darray 类型中:

struct elements a[100];

关于c - 非同质数组的内存分配是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39814863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com