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

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) 设置复合文字的类型,并使用 & 获取指向它的指针。浮点指针也是如此。