2

sum(int [], arr_size)ステートメントで関数を呼び出す

total = sum((int []){1,2,3,4,5}, 5);

複合リテラル(int []){1,2,3,4,5}引数として渡されます。配列の長さがリテラルの要素の数によって決定されることは明らかです(これはもちろん5ここにあります)。5それでは、別の引数として 渡す必要は何ですか?

上記の関数を次のように定義できませんか

sum(int []) {....}

そしてそれを次のように呼び出します

total = sum((int []){1,2,3,4,5})

?

4

2 に答える 2

5

そのように定義sumして、例に示すように呼び出すことができますが、その場合、関数内の配列のサイズを決定することはできません。

あなたができることは、次のように宣言することsumです

int sum(int (*a)[5]) 
{
  ...
}

そしてそれを次のように呼び出します

total = sum(&(int []){1,2,3,4,5});

ただし、この場合、サイズの配列5のみに制限されます。任意のサイズの配列で機能する関数が必要な場合は、外部からサイズを渡すか、配列にある種の「ターミネーター」要素を予約する必要があります

于 2013-06-28T22:58:20.800 に答える