博客
关于我
C++基础(六)栈、堆、new关键字、delete关键字
阅读量:265 次
发布时间:2019-03-01

本文共 1499 字,大约阅读时间需要 4 分钟。

全局变量、静态变量及常量的存储位置分析

在编程中,理解变量的存储位置对程序的运行机制有着深刻的影响。全局变量、静态变量和常量的存储位置各有不同,这一点对于任何一个C程序员来说都至关重要。

全局变量的存储位置在程序的运行时环境中。全局变量是指在程序运行时,所有函数都能访问的变量。它们的生命周期从程序开始直到程序结束。

静态变量的存储位置则是在程序的运行时内存中,但它们的生命周期与函数的调用有关。静态变量通常在函数内部声明,程序运行时只会初始化一次,并在程序结束后未被销毁。

至于常量,它们的存储位置取决于如何定义。如果是一个本地常量(如int main()中的常量),则会在程序运行时的栈中分配存储空间。如果是一个全局常量(如const int GLOABL_CONST = 123;),则会在程序的全局内存区分配存储空间。

局部变量的声明周期与栈的使用有关。在函数调用时,局部变量会被压入栈中,函数返回后变量会被弹出栈中,释放内存空间。这种机制允许程序在多次函数调用时,正确地管理局部变量的内存。

关于动态内存管理,C语言提供了new和delete操作符来手动管理内存。在使用new操作符时,程序会在堆中分配一块内存空间,并将指针返回。使用delete操作符时,程序会释放这块内存空间。需要注意的是,使用new时如果分配的是数组,必须使用delete[]来释放;如果分配的是单个对象,使用delete即可。

例如,在以下代码中,run()函数使用new操作符在堆中分配一块内存,返回指针。main函数调用run()获取指针并输出值。需要注意的是,调用delete操作符后,指针将失效,不能再被使用。

#include 
using namespace std;int* run() { int a = 100; int* a1 = new int(100); return a1;}int main() { int * p = run(); cout << *p << endl; delete p; // 不能再使用p指针了 system("pause"); return 0;}

在另一个例子中,run2函数使用new操作符分配一个内存块,返回指针。main函数调用run2获取指针数组p2,并在循环中修改数组中的值。最后使用delete[] p2来释放数组内存。

#include 
using namespace std;int* run() { int a = 100; int* a1 = new int(100); return a1;}int* run2() { int* p = new int[10]; return p;}int main() { int * p = run(); cout << *p << endl; delete p; int* p2 = run2(); for (int i = 0; i < 10; i++) { p2[i] = 100 + i; } for (int i = 0; i < 10; i++) { cout << p2[i] << endl; } delete[] p2; system("pause"); return 0;}

这些机制为程序提供了对内存的精确控制,但也需要程序员谨慎管理,避免内存泄漏或指针失效。

转载地址:http://efzo.baihongyu.com/

你可能感兴趣的文章
python中时间处理_Python中处理时间的几种方法小结
查看>>
Python中枚举串口(包括虚拟端口)的跨平台方法是什么?
查看>>
python中根号下a怎么写_python中根号怎么表示
查看>>
Python中正则表达式的巧妙使用
查看>>
Python中浮点数的二进制表示(位不是十六进制)
查看>>
Python中特殊函数和表达式 filter,map,reduce,lambda
查看>>
python中用socket检测端口_Python 用socket模块实现检测端口和检测web服务
查看>>
python中用于列表操作的plus和append有什么区别?
查看>>
python中用递归求和
查看>>
python中的@staticmethod
查看>>
python中的array函数作用_NumPy 数组使用大全
查看>>
python中的isinstance判断多个对象类型
查看>>
python中的keys、values、items
查看>>
Python中的lambda和apply结合使用
查看>>
python中的map函数
查看>>
Python中的numpy模块解析
查看>>
Python中的pickle
查看>>
Python中的signal模块和Ctrl+C操作
查看>>
python中的sort方法
查看>>
Python中的threading
查看>>