2

渡された配列の長さをmonkeyメソッドで計算する必要があります。入力がmonkeyメソッド内のポインターに減衰するため、どうすればよいですか?

int monkey(int input1[])
{

    //Write code here
}

制約: 1) 関数のシグネチャを変更することはできません。

4

7 に答える 7

9
int monkey(int input1[], size_t arraySize)
{

}

配列のサイズを渡すのが最も一般的な方法です。

または、C 文字列のようなことを行い、配列の最後にセンチネル値(最大値、0、-1 など) を追加し、このセンチネル値の前の要素の数をカウントすることもできます。

私が考えることができる他の選択肢はありません。

于 2013-01-20T08:18:21.980 に答える
5

一般的なケースでは、そうではありません。単なるポインタであるため、配列に関する情報は利用できません。

したがって、サイズを渡すか、サイズを含む構造体でラップする必要があります。

または、int の配列であるため、配列の最初の値をサイズとして使用できます。

または、ユースケースによっては、配列内のデータをゼロで終了する (または明確に末尾をマークする) こともできます。

于 2013-01-20T08:20:30.677 に答える
4

Cでそのようなことを行う方法はありません.あなたの関数の定義

int monkey(int input[])

正式に同等です

int monkey(int *input)

そのため、配列の長さを追加のパラメーターとして常に渡す必要があります

于 2013-01-20T08:21:40.723 に答える
1

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

または、必要に応じてクリティカル セクションまたはセマフォ/ロックで保護できるグローバル変数など、別のチャネルを介してサイズ/カウントを渡すこともできます。

于 2013-01-20T08:24:20.110 に答える
1

配列を関数に渡すと、配列の最初の要素として長さを格納できます。

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.

于 2013-01-20T08:24:31.963 に答える
0
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;
}
于 2019-05-22T18:34:45.217 に答える
-1

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 コンテストの回答を送信しました

于 2013-12-04T14:23:15.910 に答える