指针数组
int *a[10];//sizeof(a) sizeof(a[0])
short* a[10]
二级指针
指向一级指针的地址
int **pp=&p;
*pp=10;//p变成一个野指针
图示说明

image.png
int a=10;
int *p=&a;//
int **pp=NULL;
pp=&p;
*pp=*pp+1;//
printf("%p %p %d\n",p,*pp,*p);
getchar();
结论:
一级指针和变量a的地址都没有变化,只是通过*pp改变了p的指向,结合数组分析。
指向二维数组的指针
char arr[2][10]={{"hello"},{"world"}};
char **pp=NULL;
pp=arr;
指针与二维数组
1、 a+1 指向的是第一行的元素,也就是指向一个一维数组
2、 a[1] 指向的是第一行,第0列的元素的地址
3、 *(a+1) 指向的是第一行,第0列的元素的地址
4、 a[1]+2 指向的是第一行的第二列的元素的地址
5、 *(a+1)+2 指向的是第一行的第二列的元素的地址
6、 *(a[1]+2) 指向的是第一行的第二列的元素
7、 ((a+1)+2) 指向的是第一行的第二列的元素
注意:
二位数组的名字代表的是二级指针;
[]可以等同理解为解引用(类似于* 的解引用的方式)