Llllln 发表于 2020-7-1 11:13:54

未初始化

#include<stdio.h>
int max, min;
void r(int a[], int n);
void main()
{
        int i, a;
        printf("input 10 numbers:\n");
        for (i = 0; i < 10; i++)
                scanf("%d", &a);
        printf("\n");
        r(a, 10);
        printf("max=%d min=%d\n", max, min);
}
void r(int a[], int n)
{
        int i;
        max = a;
        min = a;
        for (i = 1; i < n; i++)
        {
                if (a > max)
                        max = a;
                if (a < min)
                        min = a;
        }
}


这个是正确的程序,我写的程序是


#include<stdio.h>
void main()
{
        void r(int a[], int n);
      int i, a,min,max;
        printf("input 10 numbers:\n");
        for (i = 0; i < 10; i++)
                scanf("%d", &a);
        printf("\n");
        r(a, 10);
        printf("max=%d min=%d\n", max, min);
}
void r(int a[], int n)
{
        int i,max,min;
        max = a;
        min = a;
        for (i = 1; i < n; i++)
        {
                if (a > max)
                        max = a;
                if (a < min)
                        min = a;
        }
}

这个程序的意思是输出最大值最小值,两个程序的区别是第一个程序里面max,min是全局变量,而第二个程序里是再定义max,min的,结果VS显示第二个程序的错误是main函数的max,min未初始化,还请大佬们指导为啥这要初始化?该怎么初始化?给max,min赋值吗?可是这里的max,min是在r函数里计算出来的呀

热气球 发表于 2020-7-1 11:47:16

在main中的定义的max和min的作用域只在定义行到main函数结尾,另外在r函数中定义的max和min的作用域是r函数内。在main中打印max,min是其初始值。

由于max和min并未初始化,所以其值是多少不确定,是内存中的垃圾值。

在使用的时候需要初始化下:
#include<stdio.h>
void main()
{
    void r(int a[], int n);
    int i, a,min=0,max=0;
    printf("input 10 numbers:\n");
    for (i = 0; i < 10; i++)
            scanf("%d",&a);
    printf("\n");
    r(a, 10);
    printf("max=%d min=%d\n", max, min);
}
void r(int a[], int n)
{
    int i,max=0,min=0;
    max = a;
    min = a;
    printf("r:max=%d min=%d\n", max, min);
    for (i=1;i<n;i++)
    {
      if (a > max)
         max = a;
      if (a < min)
            min = a;
    }
    printf("r:max=%d min=%d\n", max, min);
   
}

Llllln 发表于 2020-7-1 13:45:07

热气球 发表于 2020-7-1 11:47
在main中的定义的max和min的作用域只在定义行到main函数结尾,另外在r函数中定义的max和min的作用域是r函数 ...

好的,谢谢~

热气球 发表于 2020-7-1 14:20:48

Llllln 发表于 2020-7-1 13:45
好的,谢谢~

搞个采纳嘿嘿

405794672 发表于 2020-7-2 08:28:28

你在打印max,min时,它们二位还没有赋值呢!如果是C++,不会报错,直接给你打印出来,如果是C,就会报错。它要求必须赋值后,你才能使用它参与计算或显示。
页: [1]
查看完整版本: 未初始化