gpt4 book ai didi

iphone - 如何将数组分配给结构成员数组?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:18:55 26 4
gpt4 key购买 nike

如何将 c 类型数组分配给也是相同类型数组的结构成员?这是我的结构:

typedef struct {

uint8_t type;
uint8_t data[10];

} MyStruct;

这是结构的创建:

MyStruct myStruct;

这是一些数组的生成:

uint8_t generatedArray[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

这是我的作业:

myStruct.data = generatedArray;

最佳答案

正如其他答案所说,数组不是直接可赋值的,您必须使用 memcpy 之类的函数:

memcpy(myStruct.data, generatedArray, sizeof(myStruct.data));

然而...

C 是一种历史悠久的语言。早期的语言大致有“小”和“大”类型的概念,前者可以直接分配,而后者则不能。一些后来的语言使一切都可赋值(或对于函数式语言,值)。

原始的 C 有原始类型;整数、 float 等;和这些类型的数组。前者“小”,可以分配,后者“大”,则不能。随后 C 获得了结构,并认为这些是“小”...

所以,有点奇怪,虽然你不能直接将一个数组分配给另一个数组,但你可以将一个结构分配给另一个数组,特别是你可以分配一个只有一个字段的结构,它是一个数组......你也可以写文字结构值,包括那些具有数组值字段的值;并且作为 C 的“类型是注释”方法,您可以将指向数组的指针转换为指向结构的指针...

以上意味着您可以编写“有趣”的代码,例如:

typedef struct
{
uint8_t type;
uint8_t data[10];
} MyStruct;

typedef struct
{
uint8_t data[10];
} MyArray;

typedef struct
{
uint8_t type;
MyArray array;
} MyStruct2;

void arrayAssignment(int x)
{
MyStruct myStruct;
MyArray generatedArray = {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}}; // structure literal

*(MyArray *)&myStruct.data = generatedArray;

uint8_t generatedArray2[] = {11, 12, 13, 14, 15, 16, 17, 18, 19, 20}; // array literal
*(MyArray *)&myStruct.data = *(MyArray *)generatedArray2;

MyStruct2 myStruct2;
myStruct2.array = generatedArray; // no casts at all, but element access is myStruct2.array.data[index]
}

请注意,没有任何类型转换、间接寻址等,或者在最后一个示例中,索引中额外的 array. 在编译后的代码中没有任何成本——它们都是说服编译器的简单方法使用其内置的数组赋值。

当然,许多人会反对经常使用这些技术!

关于iphone - 如何将数组分配给结构成员数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13162159/

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