如何在函数中初始化的复合文字中设置指向整数的指针?

问题描述 投票:0回答:1

我尝试通过函数中的复合文字来初始化结构。解决了我的部分问题后(请参阅在函数内使用复合文字来初始化 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

c struct compound-literals
1个回答
0
投票

ptr
的存储类不是
static
(它是常量表达式所必需的),并且您不能在函数调用中将函数参数指定为
static
,所以
 ptr
不能用于初始化
static
my_struct_t

© www.soinside.com 2019 - 2024. All rights reserved.