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;
}

 

 

posted @ 2021-08-04 17:41  yiwenzhang  阅读(33)  评论(0编辑  收藏  举报