空指针

int * p = NULL; // #define NULL 0
int * p = nullptr; // #define nullptr 0

野指针

int * p = (int *)0x3030; // 尽量避免这种写法

const修饰指针

  1. 常量指针(const修饰int,修饰的是值):指针的指向可以修改,但指针指向的值不能改

    int a = 10, b = 10;
    const int * p = &a;
    p = &b; // 正常执行
    *p = 20; // 报错
  2. 指针常量(const修饰p,修饰的是指针):指针的指向不能改,指针指向的值可以改

    int a = 10, b = 10;
    int * const p = &a;
    p = &b; // 报错
    *p = 20; // 正常执行
  3. const既修饰常量,也修饰指针

    int a = 10, b = 10;
    const int * const p = &a;
    p = &b; // 报错
    *p = 20; // 报错

const修饰形参,防止误改

struct Obj{
    int value = 0;
}
void f(const Obj * obj) {
    obj->value = 10; // 报错

标签: none

添加新评论