面试题答案
一键面试静态方式引用全局变量
- 内存分配:在程序启动时,全局变量就被分配在静态存储区,这块内存空间在程序的整个运行期间都存在。
- 作用域:全局变量的作用域是整个程序,在任何函数内部都可以访问,只要在访问前声明(如果变量定义在使用之后)。
- 生命周期:从程序启动开始,到程序结束才释放,与程序的生命周期相同。
示例代码:
#include <iostream>
// 定义全局变量
int globalVar = 10;
int main() {
// 直接使用全局变量
std::cout << "Global variable value: " << globalVar << std::endl;
return 0;
}
动态方式引用全局变量(通过指针动态分配全局变量)
- 内存分配:使用
new
操作符在堆上分配内存,这是动态分配的过程,在需要时才分配内存。 - 作用域:虽然指针本身可以在局部函数内定义,但指向的全局变量的堆内存空间,只要指针有效且未被释放,在程序任何地方都可通过指针访问。
- 生命周期:由程序员手动管理,使用
delete
操作符释放内存,如果不及时释放会导致内存泄漏。
示例代码:
#include <iostream>
// 定义全局指针变量
int* globalPtr;
int main() {
// 动态分配内存给全局指针
globalPtr = new int(20);
std::cout << "Dynamic global variable value: " << *globalPtr << std::endl;
// 释放内存
delete globalPtr;
return 0;
}
主要区别总结
- 内存分配:静态方式在程序启动时于静态存储区分配;动态方式在需要时在堆上分配。
- 作用域:静态方式作用域为整个程序;动态方式通过指针操作,只要指针有效,在程序各处可访问,但指针本身作用域依定义位置而定。
- 生命周期:静态方式与程序生命周期相同;动态方式由程序员手动管理,需及时释放避免内存泄漏。