0

私はこの非常に単純なコードを持っています:

#include <stdio.h>
#include <stdlib.h>


int maxArr(int *arr)
{
    int i=0;
    for (i = 0; i < 10; ++i)
    {
        printf("%d\n",arr[i]);
    }
    return 0;
}


int main()
{
    int* i = {0,1,2,3,4,5,6,7,8,9};
    maxArr(&i);
    return 0;
}

ただし、0,1,2,3,4,...,9 を出力する代わりに

私はこれを得ています:

0
0
0
0
0
0
1809693728
32767
203279940
1

なんで?

4

4 に答える 4

2

の初期化を次のように変更しますi

int i[10] = {0,1,2,3,4,5,6,7,8,9};

...そしてmaxArrayただi;で呼び出します すなわちmaxArray(i)

于 2012-05-07T01:48:52.287 に答える
1

iではなく、を渡す必要があります&i

int main()
{
    int* i = {0,1,2,3,4,5,6,7,8,9};
    maxArr(i);
    return 0;
}

配列を反復処理する代わりに、 から始まるメモリ アドレスを反復処理しています&i

于 2012-05-07T01:46:18.267 に答える
1

間違ったポインターを指定すると、間違ったデータが得られます (最良の場合):

maxArr(&i);

する必要があります

maxArr(i);

int **代わりに、どうして合格の警告を受けなかったのだろうかint *

于 2012-05-07T01:46:19.660 に答える
1

それは間違っている。

ここで i はすでに配列の最初の要素を指しています。

int* i = {0,1,2,3,4,5,6,7,8,9};
maxArr(&i);

i はメモリ位置 xyz のどこかに格納され、xyz には別のメモリ位置が格納されています。これは abc などの配列の最初の要素の位置であるため、&i を渡すと、i の位置、つまり abc ではなく xyz が送信されます。

それを修正するには、コードを次のように変更します

int* i = {0,1,2,3,4,5,6,7,8,9};
maxArr(i);
于 2012-05-07T01:51:49.227 に答える