gpt4 book ai didi

用指针初始化 C 结构

转载 作者:行者123 更新时间:2023-12-05 01:50:06 31 4
gpt4 key购买 nike

我是 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/

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