计算数组中的最小元素

时间:2016-02-03 12:03:52

标签: c arrays minimum

我编写了一个小程序来确定数组a[]中的最小元素。当我调试时,程序似乎最初工作正常,但是min()函数中的for循环在两步之后停止执行,尽管数组大小为10.

最终输出为23,当它为3时。

代码sizeof(a)/sizeof(int)是否不正确?我在stackoverflow上的另一个article找到了它。

#include <stdio.h>
#include <limits.h>

int min(int[]);

int main(){
    int a[]={100,23,3,4,5,6,7,8,9,10};
    printf("%d", min(a));
    return 0;
}

int min(int a[]){
    int min = INT_MAX, i;
    for(i = 0; i < sizeof(a)/sizeof(a[0]); i++){
        if((i>=0) && (a[i]< min))
            min = a[i];
    }
    return min;
}

1 个答案:

答案 0 :(得分:1)

在函数内部,a是指向整数数组的指针,因此sizeof(a)返回指针的大小,通常为4或8个字节,具体取决于系统。这样说,就不可能在函数内部使用sizeof(a)/sizeof(a[0])来计算C数组中的元素数量。您需要将明确的元素数作为参数传递给函数。

int min(int a[], int n) {
    ...
    for (i = 0; i < n; i++) {...}
    ...
}

printf("%d", min(a, sizeof(a)/sizeof(a[0])));