2016-10-11 3 views
0

ポインタを使って配列の最高値のインデックスを見つけて印刷する必要があります。私の教授は、以下の定義された整数だけで行うことができると言った(カウンターや他の貴重品はない)。Cのポインタを使って配列内の最大値のインデックスを見つける/印刷する方法

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

int main() 
{ 
int array[100], size, *MAX, *pi; 
srand(time(NULL)); 
MAX = array; 

printf("Insert array size:\n"); 
scanf("%d", &size); 

for(pi=array; pi<array+size; pi++) 
{ 
    *pi = (rand()%100) + 1; 
} 

printf("\nArray elements:\n"); 
for(pi=array; pi<array+size; pi++) 
    printf("%d\t", *pi); 

for(pi=array+1; pi<array+size; pi++) 
    if(*pi>*MAX) 
{ 
    MAX = pi; 
} 

printf("\n\nMax is %d.", *MAX); 
} 
+0

新しい最大値の*ポインタ*を記録し、同時に新しい最大値を記録します。そのインデックスはポインタ 'pimax-niz'の減算になります。しかし残念なことに 'niz'はあなたのコードでは分かりません。 –

+0

MAXは配列の最大値を指し、配列の先頭を指すポインタがあり、メモリは連続しているため、配列ポインタからMAXポインタを減算して格納されたデータ型のサイズで割ります:(MAX-array)/ sizeof(int) – Iverelo

+1

@Ivereloはサイズで除算しません。ポインタ演算がそれを処理します。私の最初のコメント「MAX」の中のOopsは、既にその値ではなく、max要素へのポインタです。そのインデックスは 'MAX - array'ですが' niz'は未定義です。 –

答えて

1

誰かがそれにつまずくと私は自分の質問に答えます。 Weather Vayneに感謝します。あなたはそれがから場所を表示するために+1を追加できるように

printf("%d", MAX - array); 

インデックスは、0からN-1までの場所を示しています

は、配列内の最大値を決定した後、あなたは、このようなインデックスが見つけます1〜n(nは配列の要素数):

printf("%d", MAX - array + 1); 
関連する問題