次のように、intの配列をCの関数に渡す方法はありますか?
func(int[]{1, 2, 3});
またはこのように?
func({1, 2, 3});
私はva_listの存在を知っていますが、それは私が探しているものではありません。
複合リテラルを探しているようです(C11§6.5.2.5複合リテラルで定義されています。C99の機能でもあります)。
func((int[]){ 1, 2, 33, 491 });
複合リテラルは、キャストの後に、キャストで指定されたタイプのブレース付き初期化子が続くように見えます。複合リテラルのスコープは、それが導入されたステートメントブロックの終わりまでであるため、呼び出しfunc()
が見つかったブロック全体で有効になります。したがって、への呼び出し全体に対して有効ですfunc()
。また、複合リテラルは変更可能な値です。
配列内の値の数を指定せずに関数へのインターフェイスについて正当に疑問を呈することはできますが(func()
配列の大きさをどのように知ることができますか)、それは複合リテラル表記の概念にいくらか接しています。
関数自体は、配列引数を取る完全に普通の関数です。
extern void func(int arr[]);
void func(int arr[])
{
…
}
または、もちろん:
extern void func(int *arr);
void func(int *arr)
{
…
}
そして(関数が配列の大きさをどのように知るかについての主な警告があります)、次のように書くことができます:
void calling_func(void)
{
func((int[]){ 1, 2, 33, 491 });
int array[] = { 2, 99, 462, -9, -31 };
func(array);
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加