c-使用字段元素初始化指向结构的指针



我想知道在C中是否可以用以下方式初始化结构:

struct Test* test = { .int_value = 10, .char_value = 'c', .pointer_to_float_value = (float*)1.512 };

如果我试图用一种定义的结构来实现这一点:

struct Test
{
int int_value;
char char_value;
float* pointer_to_float_value;
};

我得到一个错误的所有元素的结构:

error: field name not in record or union initializer

有没有办法绕过这个问题?

此语法

struct Test* test { .int_value = 10, .char_value = 'c', .pointer_to_float_value = (float*)1.512 };

无效。

相反,您可以使用复合文字,例如

float f = 1.512f;
struct Test* test = &( struct Test ){ .int_value = 10, .char_value = 'c', .pointer_to_float_value = &f };

来自C标准(6.5.2.5复合文字(

5复合文字的值是未命名对象的值由初始值设定项列表初始化。如果出现复合文字在函数体之外,对象具有静态存储期间否则,它具有与关联的自动存储持续时间封闭块。

这确实是可能的,但您正在声明一个指向结构的指针,并试图将其初始化为结构(而不是指针(。浮点指针也有同样的问题。以下内容应该有效:

float a = 1.512;
struct Test test_struct = { .int_value = 10, .char_value = 'c', .pointer_to_float_value = &a };
struct Test *test = &test_struct;

您的代码存在许多问题。您没有=符号,并且没有正确处理指针和类型。

可以这样做:

struct Test * test = &(struct Test){ .int_value = 10, 
.char_value = 'c',
.pointer_to_float_value = &(float){1.512f} };

注意它是如何使用(struct Test)来设置复合文字的类型,并使用&来获取指向它的指针的。这同样适用于浮点指针。

最新更新