我是 C 的新手,我不明白为什么下面的代码不起作用:
typedef struct{
uint8_t a;
uint8_t* b;
} test_struct;
test_struct test = {
.a = 50,
.b = {62, 33}
};
如果我改为这样做,它会起作用:
int temp[] = {62, 33};
test_struct test = {
.a = 50,
.b = temp
};
最佳答案
b
成员不是数组而是指针。因此,当您尝试像这样初始化时:
test_struct test = {
.a = 50,
.b = {62, 33}
};
您将 test.b
设置为转换为指针的值 62,并丢弃了额外的初始化程序。
第二种情况有效,因为您使用 temp
初始化 b
成员,它是一个 int
数组,它衰减为指向一个指针的指针int
来匹配成员 b
的类型。
你也可以这样做,它会起作用:
test_struct test = {
.a = 50,
.b = (int []){62, 33}
};
但是,指向复合文字的指针将只在它被声明的范围内有效。因此,如果您在函数内部定义此结构并返回它的副本,则指针将不再有效。
关于用指针初始化 C 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73407846/