我尝试通过函数中的复合文字来初始化结构。解决了我的部分问题后(请参阅在函数内使用复合文字来初始化 C 中的变量),我遇到了一个新问题,其中一个成员 (
ptr_mb
) 必须是指向变量的指针。
这是代码
typedef struct {
int i_mb;
int * ptr_mb;
} my_struct_t;
void init_struct(my_struct_t *my_struct, int * const ptr) {
*my_struct=&(static my_struct_t) {.i_mb=3, .ptr_mb= ptr};
}
int main() {
int a;
my_struct_t *my_struct;
// my_struct = &(my_struct_t) {.i_mb=3, .ptr_mb=&a}; It is OK
// Try to initialize it in a function
init_struct(my_struct, &a);
}
总的来说,它有效(参见程序中的注释行)
出现编译错误。在函数
init_struct
中,ptr 不是常量(行:*my_struct=&(static my_struct_t) {.i_mb=3, .ptr_mb= ptr};
)。
a
变量是在main
中声明的变量。因此,它的地址是恒定的。我试着用(int const *)
,(int * const)
,(int const * const)
,...来表现做作。有时,这是毫无意义的,但只是尝试却没有任何效果。
是否可以在函数中进行此类初始化(它在主函数中工作)?
(Rq。使用了
static
。我知道这是一个C23标准,该标准尚未发布,详细信息:https://stackoverflow.com/a/78159921/7462275)
ptr
的存储类不是static
(它是常量表达式所必需的),并且您不能在函数调用中将函数参数指定为static
,所以 ptr
不能用于初始化 static
my_struct_t
。