学习笔记---全局与局部变量

41 篇文章 0 订阅
10 篇文章 0 订阅

变量类型

由变量作用域划分,变量分为全局变量和局部变量


变量作用域

含义:变量的有效范围


全局变量(全程变量)

定义:在函数外定义的变量

作用域:从定义变量的位置到本源文件结束


注:作用域是从变量定义的位置开始的!在变量定义前即使是全局变量也无法被调用


局部变量

定义:在函数/复合语句内部定义的变量

作用域:从定义的位置到函数/复合语句结束


注1:局部变量在被定义时分配空间,当程序的执行离开变量的作用域时,变量的空间将被释放(和形参同理,因为形参也是局部变量

注2:不同的函数及作用域中可以使用相同名字的局部变量,它们在内存中分属不同的存储区间,互不干扰

注3:当全局变量和局部变量同名时,对该名称变量的操作将优先使用局部变量,而全局变量将被屏蔽


代码示例:

#include <stdio.h>
#include <stdlib.h>
/*
这个程序用来测试全局变量和局部变量
*/

void fun1();
void fun2();
int x1=1;//变量定义在main函数外,所以x1是全局变量
int main()
{
    int x2=1;//变量定义在main函数内,所以x2是局部变量
    x1++;
    x2++;
    printf("x1=%d\tx2=%d\n",x1,x2);
    fun1();
    printf("x1=%d\tx2=%d\n",x1,x2);
    fun2();
    printf("x1=%d\tx2=%d\n",x1,x2);
    return 0;
}

void fun1()
{
    int x2=1;
    x2+=3;
    x1+=3;
}

void fun2()
{
    int x2=1;
    x2+=7;
    x1+=7;
}


结果:


解析:

如上所示,各个函数都能修改全局变量的值


全局函数和局部函数


示例代码:

#include <stdio.h>
#include <stdlib.h>
/*
这个程序用来测试局部函数
*/
int main()
{
    int gcd(int,int);//函数定义的位置在main函数内部,所以是局部函数
    int lcm(int,int);
    int num1=56,num2=80;
    int iGcd,iLcm;
    iGcd=gcd(num1,num2);
    iLcm=lcm(num1,num2);
    printf("%d,%d\n",iGcd,iLcm);
    return 0;
}

int lcm(int n1,int n2)
{
    return n1*n2/gcd(n1,n2);//此处调用gcd函数时,因为并不能在上方找到同名全局函数的声明,所以会报错。
}

int gcd(int n1,int n2)
{
    int r;
    while(n2!=0)
    {
        r=n1%n2;
        n1=n2;
        n2=r;
    }
    return n1;
}

编译时报错:


解析:

先声明(定义)后使用,这一点上变量和函数时相通的。



总结:


全局变量

优势:

增加函数间数据联系的渠道

劣势:

1.空间效率低:全局变量在程序的全部执行过程中都占用存储单元,而不是像局部变量那样只在需要时才开辟存储单元。

2.高耦合性:全局变量使函数的通用性降低了(函数执行时要受到外部变量的影响。。。。将一个函数移到另一文件中时,容易发生变量同名的冲突)

3.可读性降低:使用全局变量过多,会降低程序的清晰性(多个函数都能修改全局变量的值。。。。)


程序设计应尽量遵循的原则:高内聚、低耦合

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值