5.1重学C++之【指针定义使用、空指针野指针、const修饰指针】

#include<iostream>
using namespace std;



int main(){
    /*
        指针的定义和使用
    */
    int a = 10;
    //定义指针:数据类型 * 指针变量名
    int * p;
    //让指针记录变量a的地址
    p = &a;  // &取址符
    cout << &a << endl;
    cout << p << endl;

    //使用指针,指针可以读写其指向的内存
    //通过解引用的方式可以找到指针指向的内存
    //指针前加 * 表示解引用,可找到指针指向的内存中的数据
    *p = 1000;
    cout << a << endl;
    cout << *p << endl;



    /*
        指针所占的内存空间
        不管何种数据类型的指针,在32位环境下占用4字节,在64位环境下占用8字节;本地默认环境一般为32位
    */
    int b = 20;
    int * pp = &b;
    cout << sizeof(int *) << endl;  //4 'int *'即为指针pp的数据类型
    cout << sizeof(pp) << endl;  //4
    cout << sizeof(double *) << endl;  //4
    cout << sizeof(float *) << endl;  //4
    cout << sizeof(char *) << endl;  //4



    /*
        空指针&野指针
        空指针:指针变量指向内存中编号为0的空间,用作初始化指针变量,注意空指针指向的内存不可访问
        野指针:指针变量指向非法的内存空间,程序中应避免野指针,会报错
    */
    int * p1 = NULL;
    //*p1 = 100;  //程序崩溃报错,0~255内存编号是系统占用的,不可以人为访问
    cout << p1 << endl;
    int * p2 = (int *)0x1100;  //随便指向一个内存,查看是否有权限读取
    cout << p2 << endl;
    //结论:空指针和野指针都不是我们人为申请的空间,因此不要访问!



    /*
        const修饰指针
        三种情况:
        const修饰指针--常量指针
        const修饰常量--指针常量
        const既修饰指针又修饰常量
    */
    a = 10;
    b = 20;

    // 1 常量指针:指针指向的值不可以改,指针的指向可以改
    const int * _p = &a;
    //*p = 20; //报错
    _p = &b;  //可以

    // 2 指针常量:指针指向不可以改,指针指向的值可以改
    int * const _p2 = &a;
    *_p2 = 100;  //可以
    //_p2 = &b; //报错

    // 3 同时修饰:此时指针指向和指针指向的值都不可以改
    const int * const _p3 = &a;
    //*_p3 = 100;  //报错
    //_p3 = &b; //报错
    // 区分技巧:看const右侧紧跟着的是指针还是常量,是指针就是常量指针,是常量就是指针常量


    return 0;
}

posted @ 2021-03-09 20:36  yub4by  阅读(28)  评论(0编辑  收藏  举报