野指针和空指针
声明指针的时候没有初始化,导致指针指向一个随机的地址,无法使用
#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*类型指针有很多用处,因为它可以接收任何类型的指针
无情的摸鱼机器