2016-10-11 2 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- 배열)/sizeof (int) – Iverelo

+1

@Iverelo는 크기로 나누지 않습니다. 포인터 연산이 당신을 대신해 처리합니다. 첫 번째 주석 'MAX'의 죄송 합니다만 이미 값이 아닌 최대 요소에 대한 포인터입니다. 그래서 그것의 인덱스는'MAX - array'이지만'niz'는 정의되지 않았습니다. –

답변

1

아무도 걸리지 않으면 내 질문에 답변 해드립니다. 날씨 Vayne 덕분에. 당신이에서 장소를 표시하기 위해 하나를 추가 할 수 있도록

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

인덱스는 0부터 n-1까지의 위치를 ​​보여줍니다

는 배열의 최대 값을 결정한 후,이 같은 인덱스를 찾을 수 1 ~ n (n은 배열의 요소 수) :

printf("%d", MAX - array + 1); 
관련 문제