c语言 用数组在子函数给全局变量赋值,退出子函数后为什么全局变量会变化
#include <stdio.h>int max,min;//定义全局变量
void max_min(int ,int );
void main()
{
int x[]={0,1,2,3,4,5,6,7,8,9};
int i,a,b ;
max_min(x,10);//调用函数max_min,判断最值,赋予全局变量
printf("max=%d,min=%d\n",max,min);
}
void max_min(int test[],int n)
{
int i, max=min=test;
for(i=1;i<n;i++)
{
if(max<test)
max=*(test+i);
if(min>test)
min=test;
}
}
函数很简单,就是为了输出数组里面的最值,为什么在max_min函数里面,使用test给全局变量max,min赋值,退出子函数后全局变量的值会变为0,求大神解决
最主要的原因就是 你写的int i, max=min=test;
这样你就又在void max_min(int test[],int n)函数里定义了一个 max min
改的是void max_min(int test[],int n)的max min 这个函数结束时内存就释放了
输出当然不对了啊
还有你的代码大大小小 错误啊不规范啊挺多的说 学艺不精,帮不了你。:big调试一下嘛,看看数组的变化。 全局变量是不会变得 是你的代码问题#include <stdio.h>
int max,min;//定义全局变量
void max_min(int[],int );
int main()
{
int x[]={0,1,2,3,4,5,6,7,8,9};
max_min(x,10);//调用函数max_min,判断最值,赋予全局变量
printf("max=%d,min=%d\n",max,min);
return 0;
}
void max_min(int test[],int n)
{
int i;
for(i=1;i<n;i++)
{
if(max<test)
{
max=test;
}
if(min>test)
{
min=test;
}
}
} 注意变量的作用域。函数内部的max,min是局部变量,屏蔽掉了全局变量,所以函数并没有改变全局max,min的值。另,全局变量在定义时如果没有赋值,编译器会默认初始化赋值为0。
页:
[1]