1. 指针与内存四区的深度结合
在C/C++编程中,指针和内存管理是每个开发者必须掌握的核心技能。理解指针的本质必须与内存四区模型紧密结合,这是写出高质量代码的基础。
1.1 内存四区模型详解
C/C++程序运行时,内存被划分为四个主要区域:
- 代码区:存放程序执行的二进制指令,特点是只读且共享
- 全局/静态区:存放全局变量和静态变量,生命周期与程序相同
- 栈区:由编译器自动分配释放,存放局部变量、函数参数等
- 堆区:由程序员手动分配释放,通过malloc/new申请,free/delete释放
关键理解:指针本质上是一个变量,其值是另一个变量的内存地址。指针本身也有自己的存储位置和生命周期,这取决于它被定义的位置和方式。
1.2 主调函数与被调函数的内存交互规则
在实际开发中,函数间的内存交互遵循以下铁律:
-
主调函数可以传递的内存区域:
- 堆区地址(通过malloc/new分配)
- 栈区地址(如局部变量的地址)
- 全局数据区地址(全局/静态变量)
-
被调函数可以返回的内存区域:
- 堆区地址(最常见)
- 全局数据区地址
- 禁止返回栈区地址(会导致未定义行为)
c复制// 正确示例:返回堆区内存
char* createString() {
char* str = (char*)malloc(100);
strcpy(str, "Hello");
return str; // 合法,返回堆内存
}
// 错误示例:返回栈区内存
char* badFunction() {
char str[100] = "Hello";
return str; // 危险!返回局部变量地址
}
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 指针作为函数参数的特性与应用
2.1 指针的输入输出特性
指针作为函数参数时,具有两种重要特性:
- 输入特性(/in/):
- 主调函数分配内存
- 被调函数使用内存
- 典型应用:字符串处理函数如strcpy
c复制void processInput(const char* input) { // co
