有关变量的知识点学习

来源:互联网 发布:网络教师招聘 编辑:程序博客网 时间:2024/05/22 05:18

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
原创粉丝点击