要讲清静态变量与全局变量的区别,要从四个方面:一为修饰符,二为存储地址,三为生命周期,四为外部可访问性。
修饰符:全局变量在源文件的
函数外部声明(不含extern),但若其它源文件要调用这个变量,就需要
通过extern关键字来引用一下。静态变量用static来修饰;
存储地址:两者都是存储在静态存储区,非堆栈上,它们与局部变量的存储分开;
生命周期:两者都是在程序编译时或程序装入时由系统自动分配的,程序结束时消亡;
外部可访问性:全局变量在整个程序的任何地方均可访问,而静态变量相当于面向对象中的私有变量,它的可访问性只限定于声明它的那个源文件,即作用域仅局限于本文件(静态函数也一样);
由于它们都是由系统分配的存储空间,所以它们的存储地址是固定的,但值是可变的。
静态变量的声明与调用
static int fun = 6;
void function_static1111(int i) {
printf("%d\t", i);
i += 10;
}
void function_static2222(int i) {
printf("%d\t", i);
}
int main(void) {
function_static1111(1);
function_static1111(2);
function_static2222(4);
function_static2222(5);
printf("%d\n", fun); /*特立独行、不受前方干扰,老夫佩服*/
fun = fun + 100; /*给它加100,看它还不心动*/
printf("%d\n", fun); /*终于变了,看来只要条件满足,也不是没有可能*/
}
/*Result:1 2 4 5 6 106*/
全局变量的声明与调用
/*
* fileA.c
*/
int print = 100; /*声明全局变量并初始化,注意:不带extern修饰符*/
void printmessage() {
printf("fileA.c printmessage\n");
}
/*
* fileB.c
*/
void changePrint(int i) {
extern int print;
print = print * 10;
printf("After Change print = %d\n", print);
}
void ghellops() {
extern int print; /*用extern修饰符来引用全局变量,默认值为100*/
printf("Default : print = %d\n", print); /*打印默认值*/
print = 2; /*对全局变量重新赋值*/
print = print + 1; /*对全局变量做+1操作*/
printf("After Change : print = %d\n", print);
}
/*Default : print = 100
After Change : print = 3*/
后记:TNND,有的资料书害死人了,很不负责任,竞敢说C中用extern来声明全局变量,若不是老夫亲自验证,我还真相信呐。看来我的参考书有问题,很多语句模棱两可,翻译得很粗糙,害死我了
。
BTW:谁有比较好的C入门资料?有的话就PM我,感激不尽 。
分享到:
相关推荐
变量可以分为全局变量、静态全局变量、静态局部变量和局部变量 按存储区域分:全局变量、静态全局变量和静态局部变量都存放在内存的全局数据区,局部变量存放在内存的栈区 按作用域分:全局变量在整个工程文件内都...
全局变量、局部变量、静态全局变量、静态局部变量的区别
静态全局变量,静态局部变量,全局变量,局部变量静态全局变量,静态局部变量,全局变量,局部变量
CC++中的静态全局变量,静态局部变量,全局变量,局部变量的区别
在A中定义有全局变量X(或类的静态成员变量),则在动态库B中访问的X,与可执行程序C中访问的X是同一个变量还是两个不同的变量? 答案:是两个不同的变量。 2. 工程中包含动态库A,动态库B,可执行程序C。C依赖于A和...
全局变量、局部变量、静态变量三者的区别。
python局部变量全局变量-静态方法-实例变量静态变量代码解析。
注意:本文所说的全局变量指的是 variables with static storage,措词来自 c++ 的语言标准文档。 什么时候初始化 根据 C++ 标准,全局变量的初始化要在 main 函数执行前完成,常识无疑,但是这个说法有点含糊...
(1)static全局变量与普通的全局变量有什么区别?(2)static局部变量和普通局部变量有什么区别?(3)static函数与普通函数作用域有什么不同?(4)static函数与普通函数有什么区别? (1)static全局变量与普通的全局变量有...
比较局部变量、全局变量、堆、堆栈、静态和全局的区别和联系。
全局变量,静态变量,局部变量的区别,以及其内存分配情况,栈和堆的区别
函数运行机制、局部变量、全局变量、静态变量.zip
如果想在整个应用中使用全局变量,在java中一般是使用静态变量,public类型;而在android中如果使用这样的全局变量就不符合Android的框架架构,但是可以使用一种更优雅的方式就是使用Application context。 首先...
本文主要介绍了C++中的局部变量、全局变量、局部静态变量、全局静态变量的区别。具有很好的参考价值,下面跟着小编一起来看下吧
block,局部变量,全部变量,static的静态变量关系
数据结构 C++ 程序加详细注释 静态全局变量 静态数据成员 静态顺序栈等静态有关.rar
详细的分析了全局变量,局部变量,static变量的区别 以及使用时用该注意的东西,很不错的。有兴趣的可以看看
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域(.data),未初始化的全局变量和未初始化的静态变量在相邻的另一块区域(.bss)。 – 程序结束后由系统...
要用全局变量,需要使用”::” 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环...
局部变量与全局变量区别,栈、堆和静态存储区的区别[借鉴].pdf