Как вы можете сделать следующее:
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. */
...
Я бы любезно совет вы спросить 2-й, совершенно не связан вопрос, в новом вопросе. Совет: сделайте некоторое исследование первым ... :) – gsamaras
Короткий ответ: C не является Java. Некоторые вещи не могут быть выполнены на языке C так же, как в Java. Это одна из них. Вы найдете программистов C, которые будут благодарны за то, что это невозможно сделать на вашем Java-пути. – Peter