在 C 语言中,是否可以在一行中编写对具有字符串数组(即 ptr)或 int 或 ... 作为参数的函数的调用?

Ste*_*611 2 c arrays parameters arguments function-call

让我们考虑这两个函数:

void my_foo1(char ** my_par, int size) {
    for (int i=0; i<size; i++) printf("%s \n",my_par[i]);
}

void my_foo2(int * my_par, int size) {
    for (int i=0; i<size; i++) printf("%d \n",my_par[i]);
}
Run Code Online (Sandbox Code Playgroud)

为了调用它们,需要声明并初始化变量。之后,使用这些变量在第二行调用函数。

char * (my_strs[3])={"hello","world","!!!!"};
my_foo1(my_strs,3);

int my_ints[3]={1,2,3};
my_foo2(my_ints,3);
Run Code Online (Sandbox Code Playgroud)

是否可以写这样的东西:

my_foox(????,3)
Run Code Online (Sandbox Code Playgroud)

并避免变量声明?

dbu*_*ush 10

看起来您正在寻找的是复合文字

my_foo1((char *[]){"hello","world","!!!!"},3);
my_foo2((int []){1,2,3},3);
Run Code Online (Sandbox Code Playgroud)

请注意,此类文字具有其封闭范围的生命周期。

  • 但请注意,这种方法并不强制数组长度和 `size` 函数参数之间的一致性,而这会: `char *my_strs[] = { "hello", "world", "!!!!" }; my_foo1(my_strs, sizeof(my_strs) / sizeof(*my_strs));` (2认同)