C++程序设计(面向对象进阶)崔毅东 ——第3单元第01节空指针和动态内存分配

蓝咒 提交于 2020-03-01 20:23:51

nullptr and Dynamic Memory Allocation (空指针和动态内存分配)

1. 空指针

1.1. 0带来的二义性问题

  1. C++03中,空指针使用“0”来表示。0既是一个常量整数,也是一个常量空指针。
  2. C语言中,空指针使用(void *)0来表示
  3. 有时候,用“NULL”来表示空指针(一种可能的实现方式是#define NULL 0)

1.2. C++标准化委员会希望“空指针”是一个确定的东

C++11中引入保留字“nullptr”作为空指针

2. Dynamic memory management: Allocate/Release (动态内存管理:分配/释放)

2.1. C++中通过运算符new申请动态内存

new  <类型名> (初值) ;     //申请一个变量的空间
new  <类型名>[常量表达式] ;   //申请数组

如果申请成功,返回指定类型内存的地址;
如果申请失败,抛出异常,或者返回空指针(nullptr)。(C++11)

2.2. 动态内存使用完毕后,要用delete运算符来释放。

delete   <指针名>;    //删除一个变量/对象
delete []  <指针名>;     //删除数组空间

2.3.c和c++关于动态内存分配的区别

c和c++关于动态内存分配的区别

3.空指针和动态内存分配代码示例

#include <iostream>
int main() {
    int* p = nullptr;
    int* q{ nullptr }; // C++11 Initializer List

    p = new int(42);
    q = new int[ 4 ];

    std::cout << "Before: *p =" << *p << std::endl;
    *p = 24;
    std::cout << "After: *p =" << *p << std::endl;

    for (int i = 0; i < 4; i++) {
        *(q + i) = 10 + i;
        std::cout << *(q+i) << std::endl;
    }

    delete p;
    delete [] q;

    std::cin.get();
    return 0;
}

输出

before:*p=42
after:*p=24
10
11
12
13
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!