はどのようにして次の操作を行うことができます:
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;
}
これは、印刷されます:それはで定義されてしまったスコープは(ここではmain()
)残されるまで
hello
my
friend
化合物リテラルが有効です。あなたはそれがその使用は、ローカルスコープ/ブロック作成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. */
...
出典
2016-08-27 14:30:21
alk
私は親切にあなたが第二、全く関係のない質問をするアドバイスですが、新しい質問でヒント:いくつかの研究を最初に行う... :) – gsamaras
短い答え:CはJavaではありません。 Javaの場合と同じ方法でC言語で行うことはできません。これはその一つです。あなたはJavaのやり方でこれを行うことができないことに感謝するCプログラマーを見つけるでしょう。 – Peter