计算数组中的最小元素
Calculating the minimum element in an array
我编写了一个小程序来确定数组中的最小元素 a[]
。当我调试时,程序最初似乎运行良好,但 min()
函数中的 for 循环在两步后停止执行,尽管数组的大小为 10。
最终输出是 23,当它应该是 3.
代码sizeof(a)/sizeof(int)
是否有误?我在 Whosebug 上的另一个 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;
}
在函数内部,a
是一个指向整数数组的指针,因此 sizeof(a)
returns 指针的大小通常为 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])));
我编写了一个小程序来确定数组中的最小元素 a[]
。当我调试时,程序最初似乎运行良好,但 min()
函数中的 for 循环在两步后停止执行,尽管数组的大小为 10。
最终输出是 23,当它应该是 3.
代码sizeof(a)/sizeof(int)
是否有误?我在 Whosebug 上的另一个 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;
}
在函数内部,a
是一个指向整数数组的指针,因此 sizeof(a)
returns 指针的大小通常为 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])));