鱼C论坛

 找回密码
 立即注册
查看: 2794|回复: 4

c语言 用数组在子函数给全局变量赋值,退出子函数后为什么全局变量会变化

[复制链接]
发表于 2014-2-9 19:41:12 | 显示全部楼层 |阅读模式
5鱼币
#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[0];
        for(i=1;i<n;i++)
        {
                if(max<test[i])
                        max=*(test+i);
                if(min>test[i])
                        min=test[i];
        }

}


函数很简单,就是为了输出数组里面的最值,为什么在max_min函数里面,使用test[i]给全局变量max,min赋值,退出子函数后全局变量的值会变为0,求大神解决

最佳答案

查看完整内容

最主要的原因就是 你写的int i, max=min=test[0]; 这样你就又在void max_min(int test[],int n)函数里定义了一个 max min 改的是void max_min(int test[],int n)的max min 这个函数结束时内存就释放了 输出当然不对了啊 还有你的代码大大小小 错误啊不规范啊挺多的说
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-9 19:41:13 | 显示全部楼层
最主要的原因就是 你写的int i, max=min=test[0];
这样你就又在void max_min(int test[],int n)函数里定义了一个 max min
改的是void max_min(int test[],int n)的max min 这个函数结束时内存就释放了
输出当然不对了啊
还有你的代码大大小小 错误啊不规范啊挺多的说
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-9 20:02:47 | 显示全部楼层
学艺不精,帮不了你。:big调试一下嘛,看看数组的变化。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-9 20:35:19 | 显示全部楼层
全局变量是不会变得 是你的代码问题
#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[i])
                {
                        max=test[i];
                }
                if(min>test[i])
                {
                        min=test[i];
                }
        }
        
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-2-9 21:59:12 | 显示全部楼层
注意变量的作用域。函数内部的max,min是局部变量,屏蔽掉了全局变量,所以函数并没有改变全局max,min的值。另,全局变量在定义时如果没有赋值,编译器会默认初始化赋值为0。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 04:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表