看到这句话好像有点明白了函数里通过二级指针修改内容 

int *p = &a;//函数传入时如下

void eaxm(int *s){} ,传入的p 指向的地址(是a的地址),而不是p本身的地址,要想修改p需要传入指针p的地址

void exam0(int **s){}   这里传入的就是指针p的地址,s指向就是p的地址

指针理解_指针

s是指向指针p的指针 

申请空间也是,一级指针传入时,形参s只是临时的一个变量,malloc为s申请空间后,s和传入函数的变量没有关系,这块空间也不会共用。二级指针的时候,传入的是指针(假设为q)的地址,虽然s的空间是另外的空间,但是s指向的那块空间就是q的值,所以 可以申请这里*s ,相当于也为q申请了

————————————————————————————————————————————————————————————————

 指针数组:int *p[5];

数组指针:int (*p)[5];

首元素地址:p,&p[0];数组首地址:&p; 数组首地址值与首元素地址相同,但含义完全不同。&p,是将整个数组作为一个新的数组类型,&p就是这个类型对应内存空间的首地址。

                    举例

                   指针理解_指针_02这里arr+1地址加了4个字节,而&arr则是20个。