博客
关于我
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/

你可能感兴趣的文章
PowerBuilder 使用自定义事件触发键盘Enter事件
查看>>
PowerCreatorCMS UploadResourcePic 任意文件上传漏洞复现
查看>>
PowerDesigner 使用的一些技巧(转)
查看>>
QGIS在Windows上下载安装与建立空间数据库连接
查看>>
PowerDesigner165安装婆姐汉花教程
查看>>
PowerDesigner使用教程:设置注释、默认值属性
查看>>
PowerDesigner使用教程:不显示背景网格
查看>>
PowerDesigner使用教程:创建数据模型以及导出
查看>>
PowerDesigner使用教程:右侧工具栏显示/隐藏
查看>>
PowerDesigner使用教程:导出sql文件以及解决中文乱码问题
查看>>
PowerDesigner使用教程:时间字段设置
查看>>
PowerDesigner使用教程:给字段添加唯一约束
查看>>
QGIS中怎样设置图层样式并导出地图样式
查看>>
PowerDesigner使用笔记
查看>>
QGIS中怎样实现数据坐标系转换
查看>>
PowerDesigner学习--基本步骤
查看>>
PowerDesigner导出Report通用报表
查看>>
PowerDesigner教程系列(二)概念数据模型
查看>>
Powerdesigner显示表的comment和列的comment的方法
查看>>
PowerDesigner最基础的使用方法入门学习
查看>>