1、栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量值等。
2、堆区(heap):一般由程序员分配释放,随叫随到,挥之即走。
3、全局/静态区(static):全局变量和静态变量的存储是放在一起的,在程序编译时分配。
4、文字常量区:存放常量字符串。
5、程序代码区:存放函数体(包括类的成员函数、全局函数)的二进制代码。

#include <iostream>
#include <string>
#include <windows.h>
using namespace std;
int oldMan = 58; //全局变量
//1.栈的内存
void say_hello(const char* msg) { //函数的参数和局部变量存放在栈区
if (msg) {
printf("Hello,%s!\n",msg);
}
else {
printf("Hello,who are you?\n");
}
printf("老爷子今年 %d 岁!\n", oldMan);
}
//2.静态变量
void house1(int girl1) {
static int girl = 18;
if (girl == 18) {
girl = 19;
}
else {
girl = 17;
}
printf("女孩今年%d岁!\n",girl);
}
int main() {
//1.栈的内存
say_hello(NULL);
say_hello("world");
//2.堆,动态内存分配
int* salary = NULL;
salary = new int; //在堆区分配动态内存,分配一个
*salary = 100;
printf("salary:%d\n",*salary);
delete salary; //释放内存,长期不释放会导致内存泄漏
int num = 0;
printf("请输入需要雇佣的农民数量:\n");
scanf_s("%d",&num);
if (num <= 0) {
printf("请输入一个大于0的数!");
exit(1);
}
salary = new int[num];//在堆区分配动态内存,分配多个
for (int i = 0; i < num; i++) {
*(salary + i) = i + 1;
}
for (int i = 0; i < num; i++) {
printf("第%d个农民的薪资:%d\n",i+1,salary[i]);
}
printf("--over--\n");
delete[] salary;
//切记,delete 后的动态内存,禁止访问
/*for (int i = 0; i < num; i++) {
printf("第%d个农民的薪资:%d\n", i + 1, salary[i]);
}*/
//3.全局变量/静态变量
printf("老爷子今年%d岁!\n",oldMan);
house1(0);
house1(0);//第二次调用时girl的值不会被重新赋值为18
system("pause");
return 0;
}
分类:
C++基础第一卷
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探