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

局部变量:

​
#include<stdio.h>
int main()
{
        int i=333;
        printf("before i=%d\n",i);
        for(int i=0;i<10;i++)
        {
                printf("i=%d\n",i);
        }
        printf("after i=%d\n",i);
        return 0;
}

​

运行结果:

#include<stdio.h>
int main()
{
        int i=333;
        printf("before i=%d\n",i);
        for(i=0;i<10;i++)
        {
                printf("i=%d\n",i);
        }
        printf("after i=%d\n",i);
        return 0;
}

 运行结果:

 全局变量:

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

#include<stdio.h>
int count;
void a()
{
        count++;
}
void b()
{
        count++;
}
void c()
{
        count++;
}
int main()
{
        a();
        b();
        c();
        printf("count=%d\n",count);
        return 0;
}

       运行结果:

 

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

#include<stdio.h>
int a;
int b=520;
void func()
{
        int a=333;
        int b=666;
        printf("func:a=%d,b=%d\n",a,b);
}
int main()
{
        printf("main:a=%d,b=%d\n",a,b);
        func();
        printf("main:a=%d,b=%d\n",a,b);
        return 0;
}

运行结果:

#include<stdio.h>
int a;
int b=520;
void func()
{
        a=333;
        int b=666;
        printf("func:a=%d,b=%d\n",a,b);
}
int main()
{
        printf("main:a=%d,b=%d\n",a,b);
        func();
        printf("main:a=%d,b=%d\n",a,b);
        return 0;
}

 运行结果:

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

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

#include<stdio.h>
void func()
{
        count++;
}
int count=1;
int main()
{
        func();
        printf("count=%d\n",count);
        return 0;
}

运行结果:

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

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

#include<stdio.h>
void func()
{
        extern count;
        count++;
}
int count=1;
int main()
{
        func();
        printf("count=%d\n",count);
        return 0;
}

运行结果:

 此时就编译成功了。

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

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

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值