Как я могу найти два самых больших из 10 чисел с помощью указателя?

#c

#c

Вопрос:

То, что я хочу, можно сделать с помощью простых программ, но как я могу сделать это с помощью указателя? Я думаю, что у меня где-то ошибка.

Это мои записи.

 3 4 8 1 6 9 7 2 5 2.
 

Это вывод.

 1.major=0 2.major=0
 

мои коды.

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

void func(int*major1,int*major2);
int main() {
    int major1,major2;
    func(amp;major1,amp;major2);
    printf("1.major=%d 2.major=%d",major1,major2);

    return 0;
}
void func(int*major1,int*major2){
    int array[10],i;
    
    *major1=0;
    *major2=0;  
    for(i=0;i<10;i  ){
        printf("%d.number",i 1);
        scanf("%d",amp;array[i]);
        if(array[i]>major1){
            *major2=*major1;
            *major1=array[i];
            
            
        }
        else if(major2>major1) {
            *major2=array[i];
            }
        
    }
    
    
}
 

И экран ошибки.

 [Warning] comparison between pointer and integer
 

Комментарии:

1. if(array[i]>major1) должно быть if(array[i]> *major1)

2. Предупреждение почти всегда является скорее ошибкой.

Ответ №1:

Предупреждение правильное, на строках, где вы сравниваете major1 , и major2, вам не хватает * передних (всего 2 строки). Таким образом, все, на что вы ссылаетесь, func должно быть *major1 и *major2 для доступа к значению за указателем.

Ответ №2:

придерживайтесь только этого

     if(array[i]>*major1) {
        *major2=*major1;
        *major1=array[i];
    }
 

Комментарии:

1. это только половина исправления, есть еще одна проблема чуть ниже того, что вы вставили

2. Это даже не будет предупреждением, потому что сравнение указателей совершенно законно

3. Другая половина должна быть else if (array[i] > *major2) { *major2 = array[i]; } такой .

4. Да, это сработало, спасибо lot.@starboy_jb и я использовал то, что вы сказали, в команде else if, благодаря вам. @Ян Эбботт

Ответ №3:

Этот код может вам помочь :

 #include <stdio.h>

void func(int*major1,int*major2);

int main()
{
    int major1,major2;
    func(amp;major1 , amp;major2);
    return 0;
}

void func(int *major1,int *major2)
{
     int array[10];
    *major1=0,*major2=0;

    for(int i=0;i<10;i  )
    {
        printf("%d.number :",i 1);
        scanf("%d",amp;array[i]);
        if(array[i]>*major1)
        {
             *major2=*major1;
             *major1=array[i];
        }
        if(array[i]>*major2amp;amp;*major1>array[i])
        {
            *major2=array[i];
        }
    }
    
    for(int i=0;i<10;i  )
    {
        if(array[i]>*major2amp;amp;*major1>array[i])
        {
              *major2=array[i];
        }
     }
    printf("nThe first biggest number in this array is :%d",*major1);
    printf("nThe second biggest number in this array is :%dn",*major2);
}
 

Комментарии:

1. относительно: func(amp;major1 , amp;major2); where func() вызывается, переменные major1 и major2 уже являются указателями. итак, то, что передается func() , — это два указателя на указатели, а не два указателя на int