栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言的局部变量和全局变量

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言的局部变量和全局变量

局部变量:
​
#include
int main()
{
        int i=333;
        printf("before i=%dn",i);
        for(int i=0;i<10;i++)
        {
                printf("i=%dn",i);
        }
        printf("after i=%dn",i);
        return 0;
}

​

运行结果:

#include
int main()
{
        int i=333;
        printf("before i=%dn",i);
        for(i=0;i<10;i++)
        {
                printf("i=%dn",i);
        }
        printf("after i=%dn",i);
        return 0;
}

 运行结果:

 全局变量:

        如果不对全局变量进行初始化,那么它会自动初始化为0。如:

#include
int count;
void a()
{
        count++;
}
void b()
{
        count++;
}
void c()
{
        count++;
}
int main()
{
        a();
        b();
        c();
        printf("count=%dn",count);
        return 0;
}

       运行结果:

 

         如果在函数的内部存在一个与全局变量同名的局部变量,编译器并不会报错,而是在函数中屏蔽全局变量(也就是说在这个函数中,全局变量不起作用)。如:

#include
int a;
int b=520;
void func()
{
        int a=333;
        int b=666;
        printf("func:a=%d,b=%dn",a,b);
}
int main()
{
        printf("main:a=%d,b=%dn",a,b);
        func();
        printf("main:a=%d,b=%dn",a,b);
        return 0;
}

运行结果:

#include
int a;
int b=520;
void func()
{
        a=333;
        int b=666;
        printf("func:a=%d,b=%dn",a,b);
}
int main()
{
        printf("main:a=%d,b=%dn",a,b);
        func();
        printf("main:a=%d,b=%dn",a,b);
        return 0;
}

 运行结果:

在这个代码里面因为函数func里面没有定义一个a的变量而b定义了,因此a改变的是全局变量而b改变的是局部变量。 

        假如我们把全局变量定义在函数之后会怎么样?

#include
void func()
{
        count++;
}
int count=1;
int main()
{
        func();
        printf("count=%dn",count);
        return 0;
}

运行结果:

报错了。此时可以使用extern关键字 。

        用extern关键字可以告诉编译器我们在后面定义了这个变量。

#include
void func()
{
        extern count;
        count++;
}
int count=1;
int main()
{
        func();
        printf("count=%dn",count);
        return 0;
}

运行结果:

 此时就编译成功了。

注意:不要大量使用全局变量。

        使用全局变量会使程序占用更多的内存,因为全局变量从被定义时开始,直到程序退出才被释放。

        污染命名空间,虽然局部变量会屏蔽全局变量,但这样一来也会降低程序的可读性,人们往往很难一下子判断出每个变量的含义和作用范围。

        提高了代码的耦合性,代码过长时,不知道全局变量被哪些函数使用过。(内聚性强,耦合性低)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/429676.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号