1、指针类型的意义
指针类型有两个意义,不同的指针类型在分配字节空间的时候都是4字节(32位)。但是在解引用的时候能够体现出不同指针类型的区别。
①指针类型在解引用的实现中访问权限不同。
int a = 0x11223344
int *pa=&a;
*pa=0;
//此时指针pa的解引用会把内存a中的所有值改写为0
//因为指针pa和a的类型相同
char* pc=&a;
*pc = 0;
//这个时候指针pc能够正常赋值,但是解引用时只会清零一个字节
//此时a中存的就是0x00223344
②指针类型决定了指针每走一步的步长为多少
int arr【10】={0};
int *p = arr;
char *pc = arr;
printf("%p\n",p);
printf("%p\n",p+1);
printf("%p\n",pc);
printf("%p\n",pc+1);
//int型每走一步+4个字节,char型每走一步一个字节
2、野指针
野指针的概念:野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制)
①指针未初始化
int main()
{
//这样定义的指针就是一个野指针
int *p;//局部变量指针未初始化,默认为随机值
*p = 20;//*p解引用的时候非法访问内存了,因为在定义的时候没有申请确定的内存空间
return 0;
}
②指针越界访问
int main()
{
int arr[10]={0};
int *p=arr;
int i=0;
for(int i=0;i<=10;i++)
{
//当指针指向的范围超出数组arr的范围时,指针p越界访问,视为野指针
*(p++)=i;
}
return 0;
}
③指针指向的空间释放了
3、二级指针
二级指针简单的来说就是一个指向指针的指针。
int main()
{
int a = 38;
int* pa = &a;//pa是指针变量,一级指针
int**ppa = &pa;//ppa是一个二级指针变量,它指向pa的起始地址
}
4、指针数组
指针数组本质是数组,就像函数指针本质是指针,指针函数本质是函数。
指针数组里面存放的是指针,指针数组里面每一个元素就是一个指针。