形式上:int(类型名) ** a(变量名);
举例:int a=0;int *p=&a;int **q=&p;
q与p同样都是指针,所以都装地址,p装的是a的地址,q装的是p的地址,而p作为指针,仅此而已,因为*p==a;所以*q==p;*(*q)==a;就是这样。
二维指针的数组形式:
int a[ ] [ ];
区别:
一维数组:每个成员是变量,int a[i];表示这个数组里面有i给变量。
二维数组:每个成员是数组,int a[i0] [i1];表示有i0个成员,每一个成员都是 有i1个变量的一维数组。
总结:二维数组是 数组元素为一维数组的 一维数组。
所以,举例 int a[3][4];就是有3个成员,每一个成员都 有int x[4]这样的一维数组。
即,有a是二级指针,a就是第一位成员【这个成员是一维数组】,a代表第一个成员的地址【a==&a[0]】;
还有一种:
。int *a[3];这个等效于 int a[] [3];因为数组可以没有宽但是不可以没有长
-----------其他----------
数组初始化:int a[10]={0}; 注意:不能在定义长度可变数组时,进行初始化操作
数组常见错误:[Warning] excess elements in array initializer,表示数组的长度和下面的需要的值不一样。
---------------------------------------------------------------分界线------------------------------------
进阶版结构体指针(含多级指针)【未完】
{请先牢记重要的一点:int a,*p;如果一开始a==3,现在进行p=&a;的操作,那么我们可以通过*p=123;来修改a的值,所以地址的作用是间接修改!同理,三级指针可以修改它指向的二级指针的地址。}
定义:struct teacher{char *name; char **students;} 背景:假设让这个结构体(struct teacher)指向一个一维数组,那么其实这个结构体就是二级指针,因为一维数组的本质就是一级指针,现在编写开辟与释放空间的代码: