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
原文地址:https://www.cnblogs.com/blog-3123958139/p/5577931.html