为什么此代码打印的数字不是我的最大值?

时间:2016-05-13 11:04:49

标签: c

我是C的初学者,我正在尝试使用键盘输入创建一个计算数组最大值的程序。我不明白为什么这段代码打印4203785。我认为算法是正确的。有人能帮助我吗?

  int calcola_massimo(int vettore[], int size) {

        int max = vettore[0];
        int i;

        for(i = 0; i < size; i++ ){

            if(vettore[i] > max){
                max = vettore[i];
            }
        }

        return max;
    }


    int main(int argc, char *argv[]) {

        int array[10];
        int j;
        int max;

        for(j = 0; j< SIZE; j++){
            printf("Inserire valore n. %d \n", j+1);
            scanf("%d", array);
        }

        max = calcola_massimo(array, SIZE);
        printf("Il valore massimo e' : %d", max);

        return 0;
    }

1 个答案:

答案 0 :(得分:2)

对于初学者来说,最好将数组声明为

int array[SIZE];

至于循环,你必须写

scanf("%d", array + j );

scanf("%d", &array[j] );

否则,您始终输入array[0]。数组的所有其他元素都没有初始化。

最好按以下方式定义函数本身

int * calcola_massimo( const int vettore[], size_t size ) 
{
    const int *max = vettore;
    size_t i;

    for ( i = 1; i < size; i++  )
    {
        if ( *max < vettore[i] ) max = vettore + i;
    }

    return ( int * )max;
}

因为没有什么可以阻止用户传递大小等于0.在这种情况下,原始函数将具有未定义的行为。