我对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
};
我对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
数组,会转换为与成员b
类型匹配的int
指针。
您还可以这样做,它也能工作:
test_struct test = {
.a = 50,
.b = (int []){62, 33}
};
.b
值的生命周期是多久?需要使用静态变量吗? - tadmantest
在文件作用域中声明,则复合字面量具有完整的程序生命周期。 - dbush
b
的值设置为什么?指向什么?在第二段代码中,很明显它指向了temp
。那么第一段代码应该让b
指向什么? - David Schwartz