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; }标签:salary,int,分区,C++,内存,printf,girl,分配 From: https://www.cnblogs.com/smartlearn/p/16792185.html