程序运行后

02 程序运行后

  1. 栈区

    由编译器自动分配、释放。用于存放函数的参数值、局部变量、形参数据等。

    注意:不要返回局部变量的地址,因为栈区开辟的数据由编译器自动释放。

    #include 
    using namespace std;
    //栈区数据的注意事项
    //栈区数据由编译器管理
    //注意:不要返回局部变量的地址。
    int* fun1()
    {
    int a = 10; //局部变量,数据存放在栈区,函数执行完成后自动释放
    cout << a << endl;
    cout << (int)&a << endl;
    return &a;
    }
    void main()
    {
    int* p = fun1();
    cout << *p << endl; //第一次是编译器做了保留
    cout << *p << endl;
    cout << (int)p << endl;
    }

    运行结果:

    10
    1593309652
    10
    107
    1593309652
  • 总结:函数里面不要返回局部变量的地址。
  1. 堆区

    由开发分配和释放,若开发不释放,这在程序结束的时候由操作系统回收。

    说明:在开发中,可以在堆区存放数据。这个数据的存储内存不会被编译器删除,需要开发手动删除。若一直不删除,在程序运行结束后,操作系统将自行回收这部分内存。

    在 c++中,如果想在堆区开辟内存,需要使用new来开辟空间。

    #include 
    using namespace std;
    //在堆区开辟数据
    int* func1()
    {
    //利用 new 关键字创建堆区数据
    //  这个指针本质还是栈区数据(局部变量)。但是指针保存的地址是存放在堆区的。
    int *p = new int(10);
    return p;
    }
    int main()
    {
    int* p = func1();
    cout << *p << endl;
    cout << *p << endl;
    cout << *p << endl;
    system("pause");
    return 0;
    }

    运行结果:(环境:Windows11(arm/Apple M VM)/Visual Studio 2022/Debug/arm64)

    10
    10
    10

    注意:关键字new返回的是一个地址。比如int *p = new int(10);,返回到*p的是一个内存地址。而return p;返回的就是存放了数据10的地址。因为这一块地址不会被删除,所以会一直留着。在离开函数之后,再去访问这一块数据,数据依然存在。

    new的具体内容参加下一部分。

  • 总结:堆区的数据由开发管理开辟与释放。可以使用关键字new开辟堆区数据。
文章「程序运行后」,由本站用户「Admin」发布。文章仅代表Admin观点,不代表本站立场。
页面网页地址「https://xiaozhiyuqwq.top/p/818」。
如您对文章及其附件提出版权主张,或进行引用转载等,请查看我们的【版权声明】
无评论:-)

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇