C++学习 --- 内存分区
#include <iostream> using namespace std; //全局变量 int g_a = 10; int g_b = 10; //const 修饰的全局变量,全局常量 const int c_g_a = 10; const int c_g_b = 10; int main() { //全局区 cout << "------------在全局区----------------" << endl; //全局变量、静态变量、常量 cout << "全局变量g_a的地址为: " << (int)&g_a << endl; cout << "全局变量g_b的地址为: " << (int)&g_b << endl; //静态变量:在普通变量前加static ,属于静态变量 static int s_a = 10; static int s_b = 10; cout << "静态变量s_a的地址为: " << (int)&s_a << endl; cout << "静态变量s_b的地址为: " << (int)&s_b << endl; //常量 //字符串常量 cout << "字符串常量的地址为:" << (int)&"hello world" << endl; //const 修饰的变量(全局常量在,局部常量不在) //const 修饰的全局变量 cout << "全局常量 c_g_a 的地址为:" << (int)&c_g_a << endl; cout << "全局常量 c_g_b 的地址为:" << (int)&c_g_b << endl; //不在全局区 cout << "-----------不在全局区----------------" << endl; //普通局部变量 int a = 10; int b = 10; cout << "局部变量a的地址为: " << (int)&a << endl; cout << "局部变量b的地址为: " << (int)&b << endl; //局部常量 const int c_l_a = 10; //c:const g:global l:local const int c_l_b = 10; cout << "局部常量 c_l_a 的地址为:" << (int)&c_l_a << endl; cout << "局部常量 c_l_b 的地址为:" << (int)&c_l_b << endl; system("pause"); return 0; }
#include <iostream> using namespace std; int * func(int b) { b = 100; //形参数据也放在栈区 int a = 20; //局部变量,栈区,在函数执行完后自动释放 return &a; //返回局部变量的地址 } int main() { int * p = func(0); //接受func函数的返回值 cout << *p << endl; //编译器做了一次保留 cout << *p << endl; //第二次以后数据就不在保留了。 system("pause"); return 0; }
#include <iostream> using namespace std; int * func() { //利用new关键字,可以将数据开辟到了堆区 //指针本质也是局部变量,栈区,指针保存的数据放在了堆区 int * p = new int(10); return p; } int main() { //在堆区开辟空间 int * p = func(); cout << *p << endl; cout << *p << endl; delete p; return 0; }
#include <iostream> using namespace std; //1.new的基本语法 int * funct() { //在堆区创建整形的数据 //new 返回的是该数据类型的指针 int * p = new int(10); return p; } void test01() { int * p = funct(); //堆区的数据由程序员申请new和释放delete cout << *p << endl; cout << *p << endl; cout << *p << endl; delete p; //cout << *p << endl; return; } //在堆区开辟数组 void test02() { int * arr = new int[10]; //[] 代表数组,有10个元素 for (int i = 0; i < 10; i++) { arr[i] = i + 100; } for (int i = 0; i < 10; i++) { cout << arr[i] << endl; } delete[] arr; //释放数组 delete[] } int main() { test01(); test02(); system("pause"); return 0; }