未初始化
#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函数里计算出来的呀 在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);
}
热气球 发表于 2020-7-1 11:47
在main中的定义的max和min的作用域只在定义行到main函数结尾,另外在r函数中定义的max和min的作用域是r函数 ...
好的,谢谢~ Llllln 发表于 2020-7-1 13:45
好的,谢谢~
搞个采纳嘿嘿 你在打印max,min时,它们二位还没有赋值呢!如果是C++,不会报错,直接给你打印出来,如果是C,就会报错。它要求必须赋值后,你才能使用它参与计算或显示。
页:
[1]