C类型和存储方式的语言变量
变量的作用域:有效射程变量
》局部变量
1.在函数中的局部变量,量在该函数结束后自己主动撤销
2.函数内的复合语句中的局部变量(比方for语句),这个变量在复合语句结束后自己主动撤销。这个变量能够与1中的变量重名,在复合语句作用域中里面定义的变量权限更高,考虑到可读性不推荐这么做
比如:
#include<stdio.h> #include<stdlib.h> void fun1(); int main() { fun1(); } void fun1() { int m=200; int i=0; for(i=0;i<1;i++) { int m=5; printf("%d",m); } printf("%d\n",m); system("pause"); } //输出结果为:5 200
》全局变量
定义在全部函数外部的变量,须要注意和区分的是变量的定义和声明。仅仅要在全部函数外面定义的变量就是全局变量 ,所以这个变量不一定在一个文件的最前面几行代码,假设这个变量定义在一个函数的后面。而这个函数须要用到这个变量,那么这个变量就需在这个函数之前声明或者在这个函数内部声明方可使用,假设这个变量定在这个函数的前面,那么能够省去声明。
定义一个变量的一般形式:extern 类型说明符 变量名 (比方:int a ,在定义的时候extern能够省略。)
声明一个变量的一般形式:extern 类型说明符 变量名 (声明变量时extern不能够省略,)
变量的储存方式:储存方式决定了函数的生存期
》静态储存
能够用keyword static(描写叙述静态变量) extern(描写叙述外部变量) 来定义一个'静态储存的变量‘,注意引號之间的措词,也就是说静态变量是採用静态储存方式,而全局变量也是採用静态储存方式,静态变量和静态储存不是一个意思
·
静态变量一直存在,在预编阶段分配了内存空间,直到整个程序结束才销毁
》动态储存
能够用keyword auto(描写叙述自己主动变量,假设定义一个变量不写描写叙述符那么就是默认的auto) register(描写叙述寄存器变量) 来定义一个动态储存的变量。
动态变量在该函数或该复合语句開始运行时分配,结束时自己主动清除内存
比如:函数的形參,在定义函数时并不分配内存,仅仅有在调用时分配。调用结束后自己主动释放内存
复合语句也一个道理
静态变量之全局和局部
》静态局部变量
静态局部变量在函数内定义。他的生存周期为整个程序运行期间,可是其作用域任然与自己主动变量同样,仅仅能在定义该变量的函数内使用该变量,函数调用结束后虽然该变量还继续存在,但不能直接訪问它,假设在整个程序运行期间再次调用定义它的那个函数,在这个函数内可继续使用这个变量,变量的值为上次函数调用完时的状态。这一点非常实用。当然所有变量也能够实现一样的效果,可是easy产生副作用。
》静态全局变量
这个在程序运行期间一直有效,
须要注意的是 静态全局变量 和非静态全局变量(全局变量)
一个程序往往有非常多源码。一个源文件里包括了另外一个源码文件,
总结来说就是:全局变量在全部包括了它的源文件里均有效,而静态全局变量仅仅有在定义它的源文件里有效,
总的结论:经过局部变量,而不是静态变量改变其存储,这改变了它的生命周期;经过全局变量静态变量改变其范围。限制其范围