有关变量的知识点学习

1、全局变量和静态变量的异同
全局变量的作用域是整个程序,它只需在一个源文件中定义,就可以作用于所有的源文件,其他不包含全局变量定义的源文件需要用extern关键字再次声明这个全局变量。若某一个局部变量重新定义了这个全局变量,则全局变量作用域是除了这个局部外的整个程序,它的生命期与整个程序的生命期一样长。

全局变量、静态全局变量、静态局部变量都在静态存储区分配空间,生命期与程序生命期相同,不同点在于全局变量具有全局作用域,静态变量具有稳健作用域。

静态局部变量具有局部作用域,只被初始化一次,自从第一次被初始化直到程序运行结束都一直存在。静态局部变量只对定义自己的函数体始终可见。

静态全局变量也具有全局作用域,被static关键字修饰过的静态全局变量具有文件作用域,即使两个不同的源文件都定义了相同名字的静态全局变量,他们也是不同的变量。

局部变量在栈上分配空间。

把局部变量改变成静态局部变量后改变的是它的存储方式,即改变了它的生命期。把全局变量改变成静态全局变量后改变的是它的作用域,限制了它的使用范围。

#include<stdio.h>

static int j;
int k=0;
int m;

void fun1()
{
   static int i=0; 
   i++;
   m=i;
}


void fun2()
{
    j=0;  //如果没有此行的初始化,j最后的值也会变成10
    j++;
}

int main()
{
    for(k=0;k<10;k++)
    {
       fun1();
       fun2{};
    }
    printf("%d\n",m);
    printf("%d\n",j);
    return 0;
}
//程序输出结果为:
//10
//1

i为静态局部变量,只能被初始化一次,j在此程序中是全局变量,每次函数调用的时候都会被初始化。

2、局部变量需要“避讳”全局变量吗?
局部变量可以与全局变量重名,但是局部变量会屏蔽全局变量。在函数体内引用变量会用到同名的局部变量,而不会使用到全局变量。

全局变量与局部变量区别如下:
(1)作用域:全局变量作用域是程序块,局部变量是当前函数
(2)存储方式:全局变量分配在全局数据区,局部变量在栈区
(3)生命周期:全局变量生命期与程序生命期一样长,局部变量生命期与当前函数一样长
(4)使用方式:局部变量只能在局部使用
需要注意的是,局部变量不能赋值为同名全局变量。

3、变量的定义与变量的声明

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值