• C++ 内存管理与堆栈


    /*内存管理与堆栈:
     * # 一个由C/C++编译的程序占用的内存分为以下几个部分
     * 1.栈区:由编译器自动分配释放,数据先进后出
     * 2.堆区:由程序员手动分配释放,数据先进先出,
     *         new 和 delete,malloc 和 free 配合使用
     * 3.全局区,静态区:全局变量和静态变量的存储是放在一块的,
     *                初始化的全局变量和静态变量在一块区域,
     *                未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,
     *                程序结束后有系统释放
     * 4.文字常量区:常量字符串就是放在这里的
     * 5.程序代码区:存放函数体的二进制代码
     * # 内存泄漏
     * 1.用动态存储分配函数动态开辟的空间,
     *   在使用完毕后未释放,
     *   结果导致一直占据该内存单元,
     *   直到程序结束
     * 2.个别的内存泄漏可能不会出现大的问题,
     *   但是像在循环函数中忘记释放申请到的内存的话,
     *   会榨干系统内存的,
     *   到时系统就会出现停止响应等等问题
     * 3.指针变量定义时就初始化 nullptr 有助于防止内存泄漏
     */
    #include <iostream>
    using namespace std;
    int main()
    {
        /*易混淆的概念:
         * 1.   声明还是定义?
         * 2. & 引用还是取址?
         * 3. * 指针还是取值?
         */
        extern int x; //前缀 extern,声明 x 而非定义 x,记住不要显示初始化变量
        int y = 2; //声明并定义 y,最好习惯于显示初始化变量
        int &i = y; //等号左侧 & 与类型名 int 靠近为引用,意为把 y 的值传给 i
        int *j = &y; //等号左侧 * 与类型名 int 靠近为指针,等号右侧 & 为取 y 的地址赋予指针变量 j
        int z = *j; // j 保存了 y 的地址,等号右侧 * 为取值,由地址 j 取出 y 的值
        cout<<"y = "<<y<<endl;
        cout<<"i = "<<i<<endl;
        cout<<"j = "<<j<<endl;
        cout<<"z = "<<z<<endl;
        return 0;
    }

    360截图20160612161320809

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    void show(string *s); // 函数参数传指针
    
    int main()
    {
        string c;
        c = "ABDEL";
        string *p;
        p = &c;
        show(p);
        return 0;
    }
    
    void show(string *s)
    {
        cout<<*s<<endl;
    }
    360截图20160612161320809
  • 相关阅读:
    天气预报 Web 服务
    安装IE8在控制面板里面删除之后进不去桌面,提示找不到IESetting.dll 解决办法(解决IE8卸载不了的问题,返回IE7 ,返回IE6),从IE8回到IE7的方法.
    提供股票的Web Sservices 接口
    vc中操作Xml使用CMarkup类
    不要埋怨空降兵了
    图像分割与描述
    [非常感人] 我还能再救一个!
    向汶川地震中死难者致哀
    关于dotNet加密工具
    不注册使用 .NET Reactor
  • 原文地址:https://www.cnblogs.com/blog-3123958139/p/5577931.html
Copyright © 2020-2023  润新知