通过引用将字符串数组传递给C函数

我很难通过引用将一个字符串数组传递给函数。

char* parameters[513]; 

这代表513个字符串吗? 以下是我初始化第一个元素的方法:

  parameters[0] = "something"; 

现在,我需要通过引用将’参数’传递给函数,以便函数可以向其添加更多字符串。 函数头如何看起来如何在函数内部使用此变量?

你已经得到了它。

 #include  static void func(char *p[]) { p[0] = "Hello"; p[1] = "World"; } int main(int argc, char *argv[]) { char *strings[2]; func(strings); printf("%s %s\n", strings[0], strings[1]); return 0; } 

在C中,当您将数组传递给函数时,编译器会将数组转换为指针。 (数组“衰减”成指针。)上面的“func”完全等同于:

 static void func(char **p) { p[0] = "Hello"; p[1] = "World"; } 

由于传递了指向数组的指针,因此在修改数组时,您将修改原始数组而不是副本。

您可能想要了解指针和数组如何在C中工作。与大多数语言不同,在C中,指针(引用)和数组在很多方面都被类似地对待。 数组有时会衰减为指针,但仅限于非常特定的情况。 例如,这不起作用:

 void func(char **p); void other_func(void) { char arr[5][3]; func(arr); // does not work! } 

char* parameters[513]; 是一个513指向char的数组。 它相当于char *(parameters[513])

指向该东西的指针是char *(*parameters)[513] (相当于char *((*parameters)[513]) ),所以你的函数可能如下所示:

 void f( char *(*parameters)[513] ); 

或者,如果您想要C ++参考:

 void f( char *(&parameters)[513] );