野指针和空指针

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

#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*类型指针有很多用处,因为它可以接收任何类型的指针

无情的摸鱼机器
原文地址:https://www.cnblogs.com/wangtianning1223/p/14617878.html