使用字段元素初始化指向结构的指针
Initialisation of pointer to structure using field elements
我想知道在 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
有没有办法绕过这个问题?
这确实是可能的,但是您正在声明一个指向结构的指针并试图将其初始化为一个结构(而不是指针)。浮点指针也有同样的问题。以下应该有效:
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 { .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 The value of the compound literal is that of an unnamed object
initialized by the initializer list. If the compound literal occurs
outside the body of a function, the object has static storage
duration; otherwise, it has automatic storage duration associated with
the enclosing block.
您的代码有很多问题。您没有 =
符号,并且您没有正确处理指针和类型。
可以这样做:
struct Test * test = &(struct Test){ .int_value = 10,
.char_value = 'c',
.pointer_to_float_value = &(float){1.512f} };
注意它如何使用 (struct Test)
设置复合文字的类型,并使用 &
获取指向它的指针。浮点指针也是如此。
我想知道在 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
有没有办法绕过这个问题?
这确实是可能的,但是您正在声明一个指向结构的指针并试图将其初始化为一个结构(而不是指针)。浮点指针也有同样的问题。以下应该有效:
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 { .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 The value of the compound literal is that of an unnamed object initialized by the initializer list. If the compound literal occurs outside the body of a function, the object has static storage duration; otherwise, it has automatic storage duration associated with the enclosing block.
您的代码有很多问题。您没有 =
符号,并且您没有正确处理指针和类型。
可以这样做:
struct Test * test = &(struct Test){ .int_value = 10,
.char_value = 'c',
.pointer_to_float_value = &(float){1.512f} };
注意它如何使用 (struct Test)
设置复合文字的类型,并使用 &
获取指向它的指针。浮点指针也是如此。