zoukankan      html  css  js  c++  java
  • 野指针和空指针

    声明指针的时候没有初始化,导致指针指向一个随机的地址,无法使用

    #include<iostream>
    
    using namespace std;
    
    int main(void)
    {
        int* p;
        *p = 200;
        cout << *p << endl;
        return 0;
    }

    p就是一个野指针,它指向的是一块随机的内存地址,编译器无法给一个随机的地址赋值200

    改正

    #include<iostream>
    
    using namespace std;
    
    int main(void)
    {
        int a = 0;
        int* p=&a;
        *p = 200;
        cout << *p << endl;
        return 0;
    }

    或者

    #include<iostream>
    
    using namespace std;
    
    int main(void)
    {
        int* p = new(int);
        *p = 200;
        cout << *p << endl;
        delete(p);
        char ch = getchar();
        return 0;
    }

    空指针可以接收各种类型的指针,但是在接受的时候要强转成空指针,用的时候再转回来

    #include<iostream>
    
    using namespace std;
    
    int main(void)
    {
        int a = 10;
        void* p = (void*)&a;
        cout << *(int*)p << endl;
        return 0;
    }

    最左边的*是从地址中取值,(int*)是强转成整形指针

    空指针不能用*直接取值,因为不知道类型,所以编译器不知道从之个地址中取多少长度的数据,所以空指针只能用来存(各种数据类型变量类型的)地址,但是取值的话就必须先强转成需要的类型的指针,再用*去取值

    void*类型指针有很多用处,因为它可以接收任何类型的指针

    无情的摸鱼机器
  • 相关阅读:
    Codevs堆练习
    codevs 3110 二叉堆练习3
    浅谈堆
    codevs 2924 数独挑战
    搜索技巧——持续更新
    2144 砝码称重 2
    codevs 2928 你缺什么
    codevs 2594 解药还是毒药
    codevs 2147 数星星
    判断素数
  • 原文地址:https://www.cnblogs.com/wangtianning1223/p/14617878.html
Copyright © 2011-2022 走看看