C 如何正确初始化“min”变量?

C 如何正确初始化“min”变量?,c,gcc,initialization,C,Gcc,Initialization,我的代码中有一个小问题,就是如何从一系列数字中找到最小值。当我初始化min=0时,最小值变成0。但是当我不初始化min时,答案是正确的 为什么会发生这种情况?Xcode告诉我应该初始化min变量 int a[20] = {0}; int max = 0; int min ; int sum = 0; srand((unsigned)time(NULL)); for (int i = 1; i <= 20; i++) { a[i] = 100 + rand()%(200 - 10

我的代码中有一个小问题,就是如何从一系列数字中找到最小值。当我初始化min=0时,最小值变成0。但是当我不初始化min时,答案是正确的

为什么会发生这种情况?Xcode告诉我应该初始化min变量

int a[20] = {0};
int max = 0;
int min ;
int sum = 0;

srand((unsigned)time(NULL));

for (int i = 1; i <= 20; i++) {
    a[i] = 100 + rand()%(200 - 100 + 1);

    if (max < a[i]) {
        max = a[i];
    }
    printf("%d,%d\n",a[i],i);

    if (min > a[i]) {
        min = a[i];
    }

    sum += a[i];
}

printf("最大值:%d\n",max);
printf("最小值:%d\n",min);
printf("平均值:%d\n",sum / 20);
必须用一个大的数字初始化min,否则0可能仍然是最小的数字

您可以将min初始化为

INT_MAX是INT必须为INT_MAX添加的INT所能容纳的最大值


如果不使用值初始化min,则它将具有不确定的值,可以是任何值,因此在使用局部变量的值之前始终初始化它们。

如果不初始化局部变量,则其值是不确定的,使用该值将导致未定义的行为

您应该做的是将其初始化为一个大值,就像将max初始化为一个小值一样。使用头文件中的INT_MAX

此外,如果变量不能为负,则可能应该使用无符号int,并将min初始化为UINT_MAX

当我初始化min=0时,最小值变成0

因为在这种情况下,如果min>a[i]总是false。记住,a[i]大于等于100

但是当我不初始化min时,答案是正确的

如果不初始化局部变量,它的值是不确定的,并且包含一些垃圾值,可能是一个较大的值。看来,你的逻辑是正确的,你显然得到了正确的答案。但是,使用非斜体局部变量的值调用

解决方案:
使用头文件中存在的最大可能值INT_MAX初始化min。

编译器警告是因为访问未初始化变量的值会产生未定义的行为

在数组中查找最小值的一种常见技术是将min初始化为数组中的第一个元素,然后迭代后续元素

 min = a[0];
 for (i = 1; i < 20; ++i)     /* assume 20 elements */
     if (a[i] < min) min = a[i];
这适用于所有可以使用min>a[i]进行比较的数值类型?只要从limits.h将min初始化为INT_MAX,一切都会正常工作。
 min = a[0];
 for (i = 1; i < 20; ++i)     /* assume 20 elements */
     if (a[i] < min) min = a[i];