int a = 10;
int* p = &a;
//0-255都是系统保留的不能读,也不能写的, 指向的地址不知道是什么
//野指针是指向一个未知的内存空间,可能在读写的时候出错,也可能不出错。
p = 100;
*p = 10;
空指针
//空指针就是指向内存编号为0的空间,操作该内存空间会报错,一般用于条件判断
int* p;
p = NULL;
万能指针
int a = 10;
void* p = &a;
*(int* )p = 100;
################
int arr[10] = {0};
void* p = arr;
*(int* ) p = 100;//arr[0]
*((int*)p+1) = 200; // arr[1]
const 修饰指针
//这种方式不安全, 可以通过指针修改
//1、通过指针修改const修饰的常量
const int a = 10;
int* p = &a;
*p = 100;
################
//2、如果const修饰int* 指针类型,不能改变指针变量指向的内存地址的值
int a = 10;
const int *p;
p = &a;
*p = 100;//报错
################
// 但是可以改变指针变量指向的地址空间
int a = 10;
int b = 20;
const int *p;
p = &a;
p = &b;
################
//3、const修饰指针变量p, 可以改变指针变量指向的内存地址的值,但是不能改变指针变量指向的地址空间
int a = 10;
int b = 20;
int* const p =&a;
//p = &b; 报错
* p = 100;
################
//4、const修饰指针类型int*, 同时也修饰指针变量p,不能改变指针指向的地址空间,也不能改变该地址空间的值
int a = 10;
int b = 20;
const int * const p =&a;
//p = &b;报错
//*p = 100;报错