gpt4 book ai didi

c - 是否有可能在 c 中有一个数组 union

转载 作者:行者123 更新时间:2023-12-05 05:30:23 26 4
gpt4 key购买 nike

我希望有一个类型可以用作两个不同的数组结构——取决于上下文。它们在程序执行时不能互换使用,而是当程序以特定的启动标志执行时,该类型将作为数组类型之一进行寻址(例如):

数组 1[2][100]或者array2[200];

我对数据的组织方式不感兴趣(我很感兴趣,但这与我希望实现的目标无关)

union m_arrays
{
uint16_t array1[2][100];
uint16_t array2[200];
};

还是我必须使用指针并在运行时分配它?

uint16_t * array;

array = malloc(200 * sizeof(uint16_t));
uint16_t m_value =100;

*(array + 199) = m_value;
//equivalent uint16_t array1[1][99] == *(array + 199);
//equivalent uint16_t array2[199] == *(array + 199);

我还没有尝试过

最佳答案

union 本身包含其中一个 它的成员。也就是说,一次只能“绑定(bind)”一个成员(这只是一种抽象,因为 C 不知道哪个成员是“活跃的”)。

一般来说,该 union 的有效大小将是其成员的字节数中较大的。

举个例子:

#include <stdio.h>

typedef union m_arrays
{
int array1[2][100];
int array2[400];
} a;

int main()
{
printf("%zu", sizeof(a));

return 0;
}

在这个例子中,这将打印 1600(假设 int 的长度为 4 个字节,但最后它取决于体系结构)并且是最大的字节数。所以,,您可以在 C 语言中使用数组 union

关于c - 是否有可能在 c 中有一个数组 union ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74698231/

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