Lee*_*fin 9 c struct initialization
我有一个结构:
struct MY_TYPE {
boolean flag;
short int value;
double stuff;
};
Run Code Online (Sandbox Code Playgroud)
我知道我可以通过以下方式初始化它:
MY_TYPE a = { .flag = true, .value = 123, .stuff = 0.456 };
Run Code Online (Sandbox Code Playgroud)
但是,现在我需要创建一个指针变量My_TYPE*,我只想在那里初始化一个字段?我试过例如:
MY_TYPE *a = {.value = 123};
Run Code Online (Sandbox Code Playgroud)
但我得到编译器错误"Designator in intializer for scalar type 'struct MY_TYPE *'".
是否可以使用一个字段初始化结构?
Lun*_*din 15
首先,你是混合struct MY_TYPE和typedef.发布的代码不适用于此原因.你必须这样做:
typedef struct
{
bool flag;
short int value;
double stuff;
} MY_TYPE;
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用指向复合文字的指针来实现您的目标:
MY_TYPE* ptr = &(MY_TYPE){ .flag = true, .value = 123, .stuff = 0.456 };
Run Code Online (Sandbox Code Playgroud)
但请注意,复合文字将具有局部范围.如果您希望在本地范围的末尾使用这些数据,则必须使用指向静态或动态分配的变量的指针.
您可以使用复合文字.
#include <stdio.h>
#include <stdbool.h>
struct MY_TYPE
{
bool flag;
short int value;
double stuff;
};
int main(void)
{
struct MY_TYPE *a = &(struct MY_TYPE){.value = 123};
printf("%d\n", a->value);
}
Run Code Online (Sandbox Code Playgroud)