C++编程笔记:全局与局部变量、栈区与堆区详解

需积分: 12 1 下载量 165 浏览量 更新于2024-06-29 收藏 2.88MB PDF 举报
本篇笔记是关于C++编程语言的基础知识,主要集中在内存管理和数据存储区域的讲解。首先,我们讨论了C++中的不同类型变量:全局变量、局部变量、静态变量以及常量。 1. 全局变量和局部变量: 全局变量(如`g_a`和`g_b`)在整个程序范围内有效,其存储位置在全局区。它们在程序启动时分配空间,并在程序结束时自动释放。局部变量(如`a`和`b`)则是在函数内部定义,生命周期与函数相同,其存储在栈区内,每次函数调用时都会为它们分配新的内存,结束后自动释放。 2. 静态变量: 静态变量(如`s_a`)与局部变量类似,但生命周期贯穿整个函数的执行过程,即使函数被多次调用,它们的值也会保持不变。`s_a`的地址可以通过`&(int)s_a`获取。 3. 字符串常量: 在C++中,字符串常量如"`helloworld`"被视为不可变对象,存储在常量池中,地址不能改变,且不占用栈空间。 4. 常量: 全局常量(如`c_g_a`)和局部常量(如`c_1_a`)在声明时就被初始化,它们的值在编译时就确定,存储位置可能与普通变量不同,但同样不会改变。 5. 地址运算: 通过`(int)&变量名`可以获取变量的内存地址,这对于理解变量的存储位置和作用域至关重要。例如,局部变量`a`和`b`的地址会随着函数调用而变化,而全局变量的地址在程序运行期间保持不变。 6. 栈区和堆区: 函数参数(如`func(int b)`中的`b`)和局部变量存储在栈区,而通过`new`操作动态分配的内存(如`new int(10)`)在堆区。栈区数据的生命周期短,释放方式由编译器自动处理;堆区数据手动管理,需确保正确释放以防止内存泄漏。 7. 引用: 引用(未在提供的代码片段中出现,但通常用于避免复制对象)是C++中的一种特殊指针,它提供对已有对象的别名,引用必须在声明时初始化,并且一旦引用某个对象,就不能再引用其他对象。 8. 动态内存分配和引用: `func()`函数展示了如何使用`new`关键字在堆上动态分配内存,并返回指向该内存的指针。在`test01()`函数中,使用引用传递参数,这有助于避免不必要的复制。 总结来说,这部分笔记涵盖了C++中变量的生命周期、存储区域、常量特性、内存管理(栈与堆)以及引用的使用。这些都是编写高效和可维护的C++代码的基础知识点。