【问题标题】:Calculating the minimum element in an array [duplicate]计算数组中的最小元素[重复]
【发布时间】: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 函数中使用它。

标签: c arrays minimum


【解决方案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])));

【讨论】:

  • 投了反对票,因为这个问题已经在其他问题中得到了更深入的回答。
  • 你说:*a 是指向整数数组的指针*, but a 不是指向整数数组的指针。
  • @user694733,我在看到重复链接之前写了答案。不确定这是否足以成为否决票的理由。
  • @2501 你说的a不是指针是什么意思?
  • @ZainFarooq 通过我的投票,我试图鼓励人们朝某个方向发展。随意讨厌我,但请记住,我不讨厌这个答案;我只是认为以欺骗的身份结束比给出答案更合适。反对票不应被视为对个人的侮辱。
猜你喜欢
  • 2014-12-19
  • 1970-01-01
  • 2016-04-21
  • 2020-12-01
  • 1970-01-01
  • 2016-03-07
  • 2010-09-16
  • 2021-07-19
  • 1970-01-01
相关资源
最近更新 更多