Я действительно не могу понять ошибку, возникающую только из-за разницы в написании функции - PullRequest
0 голосов
/ 09 июля 2020
#include<stdio.h>
void minmax(int,int,int*,int*);
int main()
{
    int a[]={186,35,132,745,2345,23,154,36,24,2,55,26,346,2456,224,257,244,2784,032,234,2134};
    int len,min,max;
    len=sizeof(a)/sizeof(a[0]);
    minmax(a,len,&min,&max);
    printf("Largest: %d and Smallest: %d ",max,min);
    return 0;
}
void minmax(int arr[],int len,int *min, int *max)
{
    *min=*max=arr[0];
    int i;
    for(i=1;i<len;i++)
    {
        if(arr[i]>*max)
        {
            *max=arr[i];
        }
        if(arr[i]<*min)
        {
            *min=arr[i];
        }
    }
}

При написании этого кода я получаю следующие ошибки * .. \ src \ Test6. c: В функции main: .. \ src \ Test6. c: 8: 2: предупреждение: передача аргумента 1 'minmax' делает из указателя целое число без приведения .. \ src \ Test6. c: 2: 6: примечание: ожидается 'int', но аргумент имеет тип 'int ' .. \ src \ Test6. c: На верхнем уровне: .. \ src \ Test6. c: 12: 6: error: конфликтующие типы для 'minmax' .. \ src \ Test6. c: 2: 6: примечание: здесь было предыдущее объявление minmax

Но когда я изменяю весь код, объявляя и определяя функцию изначально все работает так гладко.

#include<stdio.h>
void minmax(int arr[],int len,int *min, int *max)
{
    *min=*max=arr[0];
    int i;
    for(i=1;i<len;i++)
    {
        if(arr[i]>*max)
        {
            *max=arr[i];
        }
        if(arr[i]<*min)
        {
            *min=arr[i];
        }
    }
}
int main()
{
    int a[]={186,35,132,745,2345,23,154,36,24,2,55,26,346,2456,224,257,244,2784,032,234,2134};
    int len,min,max;
    len=sizeof(a)/sizeof(a[0]);
    minmax(a,len,&min,&max);
    printf("Largest: %d and Smallest: %d ",max,min);
    return 0;
}

Пожалуйста, помогите мне понять концепцию или ошибку, которую мне не хватает ...

Ответы [ 2 ]

1 голос
/ 09 июля 2020

В первой версии:

void minmax(int,int,int*,int*);

затем

void minmax(int arr[],int len,int *min, int *max)
{

объявление несовместимо ни с определением, ни с которые используются в main :

minmax(a,len,&min,&max);

где a it a int * (аналогично int[])

Просто измените объявление, чтобы оно было:

 void minmax(int[],int,int*,int*);

Во второй версии minmax определено до использования main , поэтому нет неправильного объявления

0 голосов
/ 09 июля 2020
#include<stdio.h>
void minmax(int*,int,int*,int*);   //just change int to int*
int main()
{
    int a[]={186,35,132,745,2345,23,154,36,24,2,55,26,346,2456,224,257,244,2784,032,234,2134};
    int len,min,max;
    len=sizeof(a)/sizeof(a[0]);
    minmax(a,len,&min,&max);
    printf("Largest: %d and Smallest: %d ",max,min);
    return 0;
}
void minmax(int arr[],int len,int *min, int *max)
{
    *min=*max=arr[0];
    int i;
    for(i=1;i<len;i++)
    {
        if(arr[i]>*max)
        {
            *max=arr[i];
        }
        if(arr[i]<*min)
        {
            *min=arr[i];
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...