渡された配列の長さをmonkeyメソッドで計算する必要があります。入力がmonkeyメソッド内のポインターに減衰するため、どうすればよいですか?
int monkey(int input1[])
{
//Write code here
}
制約: 1) 関数のシグネチャを変更することはできません。
int monkey(int input1[], size_t arraySize)
{
}
配列のサイズを渡すのが最も一般的な方法です。
または、C 文字列のようなことを行い、配列の最後にセンチネル値(最大値、0、-1 など) を追加し、このセンチネル値の前の要素の数をカウントすることもできます。
私が考えることができる他の選択肢はありません。
一般的なケースでは、そうではありません。単なるポインタであるため、配列に関する情報は利用できません。
したがって、サイズを渡すか、サイズを含む構造体でラップする必要があります。
または、int の配列であるため、配列の最初の値をサイズとして使用できます。
または、ユースケースによっては、配列内のデータをゼロで終了する (または明確に末尾をマークする) こともできます。
Cでそのようなことを行う方法はありません.あなたの関数の定義
int monkey(int input[])
正式に同等です
int monkey(int *input)
そのため、配列の長さを追加のパラメーターとして常に渡す必要があります
2 つのオプション:
int array[10+1];
array[0] = 10;
// fill in the rest in array[1...10]
monkey(array);
// monkey() checks input1[0] to see how many data elements there are
と
int array[10+1];
array[0] = 10;
// fill in the rest in array[1...10]
monkey(array + 1);
// monkey() checks input1[-1] to see how many data elements there are
または、必要に応じてクリティカル セクションまたはセマフォ/ロックで保護できるグローバル変数など、別のチャネルを介してサイズ/カウントを渡すこともできます。
配列を関数に渡すと、配列の最初の要素として長さを格納できます。
int monkey(int input1[])
{
int len = input1[0];
for (int i = 1; i < len; ++i) {
// do something with the array
}
}
//...
int array[20];
array[0] = 20;
monkey(array);
An alternative method is to do it using pointer arithmetics instead, so that the function can treat the array as starting from 0:
int monkey(int input1[])
{
int len = *(input1 - 1);
for (int i = 0; i < len; ++i) {
// do something with the array
}
}
//...
int array[20];
array[0] = 19;
monkey(array + 1);
But it's the same thing really. The only advantage this has is guarding against mistakes like starting from 0 instead of 1. But then this means that you could forget to pass array + 1
when you call it. So meh.
int main()
{
int arr[] = { 62,34,4,4,4,3,2,-1 };
monkey(arr);
return 0;
}
int monkey(int input1[])
{
int n = 0;
while (a[n] != -1)
{
n++;
}
printf_s("Length of input1[] is: %d", n);
return n;
}
int monkey(int input1[]) {
//Write code here
}
int len = sizeof(input1)/sizeof(input1[0]); または int len = sizeof(input1)/sizeof(int);
それは間違っています..それは常に2を与えるでしょう..
長さを見つけたい場合は、2 つの方法があります... 1) 長さを渡します... (私は推測できません) 2) アイデアがある場合..input1 配列について...たとえば (TECH GIG コンペティション) 試してみてください配列の未定義部分に含まれる数値を調べる..ここで、サンプルを見つけたとします..{1,2,3,4,5} => input1[6] =>数値-9999が含まれています
そのため、長さを見つけるためにwhileループを書きました
while(input1[len]!=-9999) len++;
input1[6] => 数値 -9999 が含まれていることを確認する
-9999が答えであることを確認するために、答えのreturn input1 [6]で使用します
TECH GIG コンテストの回答を送信しました