【发布时间】:2016-05-12 14:54:44
【问题描述】:
我编写了一个小程序来确定数组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;
}
【问题讨论】:
-
当您将数组传递给函数时,它会衰减为指针。在指针上执行
sizeof只会给你指针的大小,而不是它指向的内容。 -
不,在这种情况下不正确。请参阅您链接的问题的第二个答案。
-
@Luke Collons:正如 Joachim Pileborg 在评论中提到的,只需使用
sizeof(a)/sizeof(a[0])查找数组的大小并将其作为第二个参数传递给min函数并在min函数中使用它。