C 快速声明和定义数组的字段

C Declare and define quickly the fields of an array

我有一个包含 7 个单元格数组的字段的结构,我想快速轻松地定义单元格的值。

有没有一种方法可以方便快捷地声明和定义这样的数组?

struct my_struct
{
   uint8_t array[7];
}

struct my_struct var = {0};

memcpy(var.array, (uint8_t){0,1,2,3,4,5,6}, 7);

还是这样?

struct my_struct
{
   uint8_t array[7];
}

struct my_struct var = {0};

var.array = (uint8_t)[]{0,1,2,3,4,5,6};

或者我必须这样做?

struct my_struct
{
   uint8_t array[7];
}

struct my_struct var = {0};

var.array[0] = 0;
var.array[1] = 1;
var.array[2] = 2;
var.array[3] = 3;
var.array[4] = 4;
var.array[5] = 5;
var.array[6] = 6;

谢谢 ;)

数组和结构初始化器可以嵌套:

struct my_struct var = { {0,1,2,3,4,5,6} };

使用 compound literal.

您的第一次尝试很接近,但类型规范缺少使其成为数组类型的 []

memcpy(var.array, (uint8_t[]){0,1,2,3,4,5,6}, 7);
var.array = (uint8_t)[]{0,1,2,3,4,5,6};

你是说复合文字吗?

那么语法是 (uint8_t []) 而不是 (uint8_t)[]

但是你不能给数组赋值(Why are arrays not lvalues)。

你的第一个例子几乎是正确的:

memcpy(var.array, (uint8_t){0,1,2,3,4,5,6}, 7);

但同样,请使用正确的语法:

memcpy(var.array, (uint8_t []){0,1,2,3,4,5,6}, 7);