您如何执行以下操作:
void foo(char* x[] = { "hello", "my", "friend" });
你几乎成功了...... ;-)
如果使用 C99 或更高版本,请使用如下复合文字:
foo((char *[]){"hello", "my", "friend"});
请注意,被调用函数(foo()
此处)不知道指针数组有多少元素,因此您想添加一个最终的空指针作为标记:
foo((char *[]){"hello", "my", "friend", NULL});
例子:
#include <stdio.h>
#include <stdlib.h> /* for EXIT_xxx macros */
void foo(char **arr)
{
while (arr && *arr)
{
printf("%s\n", *arr);
++arr;
}
}
int main(void)
{
foo((char *[]){"hello", "my", "friend", NULL}); /* Mind the final NULL. */
return EXIT_SUCCESS;
}
这将打印:
hello
my
friend
复合文字在离开它定义的范围之前是有效的(main()
这里)。如果您想确保它在使用后立即从堆栈中删除,请在调用周围放置大括号以foo()
创建本地范围/块:
int main(void)
{
{
foo((char *[]){"hello", "my", "friend", NULL}); /* Mind the final NULL. */
}
/* The compound literal passed to foo() is already deallocated here, had been
removed from the stack. */
...