全局变量和静态局部变量有什么区别

全局变量和静态局部变量有什么区别?

存储的地方是一样的,不同之处在于它们的作用域不同:

全局变量基本上在程序的任何地方都能被看到

而静态局部变量只能在其指定的范围内被使用

比如

int i ; // 全局变量

class C

{

public:

static int i_C; // 静态局部变量

}

void main()

{

i = 1; // 合法

i_C = 1; // 错误

C::i_C = 1; // 合法

C cc;

cc.i_C = 2; // 合法

}

2、

全局变量具有外部连接性,即同一工程中其它文件中的也可引用。

而静态变量不具有外部连接性,即同一工程中其它文件中不可以引用。

如:

//cpp1.cpp

extern int x=10;

static int y=5;

//cpp2.cpp

#include

void main()

{

extern int x;

extern int y;

cout

cout

}

将这两个文件放在同一工程中,你发现每一文件单独编译能通过,但作为工程不能构成.exe 文件运行。若将有关变量y 的行注释后(或将static 换成extern) 就可以了。这是因为静态变量的作用域在本文件内,不能扩充到其它文件。其作用是当多人合作开发一个工程时,仅在自己的文件内使用的全局变量用静态变量不会与其他人用的变量相混淆,这就是标识符的一致性。

3、静态局部变量

在局部变量前加上“static”关键字,就成了静态局部变量。静态局部变量存放在内存的全局数据区。函数结束时,静态局部变量不会消失,每次该函数调用时,也不会为其重新分配空间。它始终驻留在全局数据区,直到程序运行结束。静态局部变量的初始化与全局变量类似.如果不为其显式初始化,则C++自动为其初始化为0。

静态局部变量与全局变量共享全局数据区,但静态局部变量只在定义它的函数中可见。静态局部变量与局部变量在存储位置上不同,使得其存在的时限也不同,导致对这两者操作 的运行结果也不同。

全局变量和静态局部变量有什么区别?

存储的地方是一样的,不同之处在于它们的作用域不同:

全局变量基本上在程序的任何地方都能被看到

而静态局部变量只能在其指定的范围内被使用

比如

int i ; // 全局变量

class C

{

public:

static int i_C; // 静态局部变量

}

void main()

{

i = 1; // 合法

i_C = 1; // 错误

C::i_C = 1; // 合法

C cc;

cc.i_C = 2; // 合法

}

2、

全局变量具有外部连接性,即同一工程中其它文件中的也可引用。

而静态变量不具有外部连接性,即同一工程中其它文件中不可以引用。

如:

//cpp1.cpp

extern int x=10;

static int y=5;

//cpp2.cpp

#include

void main()

{

extern int x;

extern int y;

cout

cout

}

将这两个文件放在同一工程中,你发现每一文件单独编译能通过,但作为工程不能构成.exe 文件运行。若将有关变量y 的行注释后(或将static 换成extern) 就可以了。这是因为静态变量的作用域在本文件内,不能扩充到其它文件。其作用是当多人合作开发一个工程时,仅在自己的文件内使用的全局变量用静态变量不会与其他人用的变量相混淆,这就是标识符的一致性。

3、静态局部变量

在局部变量前加上“static”关键字,就成了静态局部变量。静态局部变量存放在内存的全局数据区。函数结束时,静态局部变量不会消失,每次该函数调用时,也不会为其重新分配空间。它始终驻留在全局数据区,直到程序运行结束。静态局部变量的初始化与全局变量类似.如果不为其显式初始化,则C++自动为其初始化为0。

静态局部变量与全局变量共享全局数据区,但静态局部变量只在定义它的函数中可见。静态局部变量与局部变量在存储位置上不同,使得其存在的时限也不同,导致对这两者操作 的运行结果也不同。


相关文章

  • 2017华为校招笔试题
  • 2017华为校招笔试题 1.局部变量能否和全局变量重名 答:能,局部会屏蔽全局.要用全局变量,需要使用"::" 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量.对于有些编译器 ...查看


  • C语言试题及答案
  • 一.问答题 1.局部变量能否和全局变量重名? 答:能,局部会屏蔽全局.要用全局变量,需要使用 ":: " 局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量.对于有些编译器而言, ...查看


  • 华为面试题 1
  • ①华为笔试题搜集 1.static有什么用途?(请至少说明两种) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变. 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函 ...查看


  • 华为软件测试工程师笔试题及部分答案
  • 1:请你分别划OSI的七层网络结构图,和TCP/IP的五层结构图? OSI的七层网络结构图,和TCP/IP的五层结构图 OSI OSI是Open System Interconnect的缩写,意为开放式系统互联.在OSI出现之前,计算机网络 ...查看


  • 全局变量和局部变量
  • C语言的变量 一.全局变量和局部变量 按照变量的有效作用范围可划 分为局部变量和全局变量.局部变量是在一个函数内部定义的变量,该变量只在定义它的那个函数范围以内有效,在此函数之外局部变量就失去意义了,因而也不能使用这些变量了.不同的函数可以 ...查看


  • C语言程序的存储区域与const关键字的使用方法
  • 一.C语言程序的存储区域 1.由C语言代码(文本文件)形成可执行程序(二进制文件),需要经过编译-汇编-连接三个阶段.编译过程把C语言文本文件生成汇编程序,汇编过程把汇编程序形成二进制机器代码,连接过程则将各个源文件生成的二进制机器代码文件 ...查看


  • 嵌入式经典面试题
  • 嵌入式经典面试题六: 关键字static的作用是什么? 这个简单的问题很少有人能回答完全.在C语言中,关键字static有三个明显的作用: 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变. 2) 在模块内(但在函数体 ...查看


  • FB和FC有什么区别
  • 用西门子PLC 编程时,可以用到功能块FB 和功能FC (FB .FC 都是组织块)资料上说FB 与FC 都可以作为用户编写的子程序,但是我不明白这两个组织块之间到底有什么区别阿?在应用上到底有什么不同之处吗? FB--功能块,带背景数据块 ...查看


  • iOS常见面试题总结
  • 1.objective-c常见面试题: 1.OC 语言的基本特点 OC 语言是 C 语言的一个超集,只是在 C 的基础之上加上了面向对象(oop) 的特性; OC 与 Java 语言相同都是单继承,这一点与 C++语言不同(多重继承); O ...查看


热门内容