1,指针是什么
指针就是地址,通常指的是指针变量。
指针变量是用来存放地址的,地址是唯一标识一个内存单元的。
指针的大小在32位平台是4个字节,在64位平台是8个字节。
2,指针的类型
int* pc = NULL;
char* pc = NULL;
short* pc = NULL;
long* pc = NULL;
float* pc = NULL;
double* pc = NULL;
2.1指针类型的作用
首先char类型的指针是一个字节,int类型的是4个字节,所以pc和pi起始地址相同(00AFF984),但是pc+1向后走一步就是一个字节(00AFF985),pi+1向后走一步就是四个字节(00AFF988)。
2.2指针的解引用
char的指针解引用只能访问一个字节,int的指针解引用能访问四个字节。
3,野指针
野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)
3.1形成野指针的原因
1,指针未初始化
2,指针越界访问
3,指针指向的空间释放
4,指针和数组
数组名表示的数组首元素的地址(除了两种&arr和sizeof)
对于sizeof(arr)显示出的结果是40,计算的是整个数组的大小
&arr,取出的是arr的地址,arr表示整个数组,所以&arr+1就是整个数组
这个A6C和A44相差28是因为十六进制的,把它转化为十进制就是40
5,指针数组和数组指针
指针数组是存放指针的数组,本质是数组
数组指针是指向数组的指针,本质是指针
首先要知道[]的优先级高于 * 所以()的作用就是让arr先和 *结合,*arr就是一个指针变量,指向大小为10的数组,数组的类型是int,叫数组指针。
[]和arr先结合,arr数组里每个元素的类型是int*,这就是指针数组
6,函数指针数组
int (*p[10]) (),这就是函数指针数组
p和[10]结合,p是数组,int (*) ()类型的函数指针