浅析C/C++数组、指针的区别和联系
这里只谈二维数组和二级指针
typedef struct { string name; float score; bool gender; } info_t;
二维数组 info_t a_info[3][4]; 二级指针 info_t **p_info;
指针是指针,数组是数组
数组的名字是指针常量,指向首元素a_info[0][0]
如何使用二维数组初始化二级指针?
答:借助数组指针
info_t (*p_info)[4] = a_info; //注意括号,优先级:下标优先于引用
没有逆过程:没有二级指针初始化或赋值二维数组的情况。
如何理解二级指针?
指针的指针
还是很meng。。。可以理解为大盒子(指针)套小盒子(指针),小盒子里面有一个手机。
无论是大盒子还是小盒子,里面的最终结果都是手机;只不过大盒子的直接物品是小盒子;大盒子再向内走一层到小盒子,小盒子内才是手机。
所以,不要混淆二级指针和二维数组,他们之间没关系!!!
如何理解二维数组?
info_t a_info[3][4]; // 3行4列
下面各个语句的含义是什么???
a_info + 1; // 指向第2行的这个数组,该数组是由4个info_t类型的元素组成
*(a_info + 1); // 指向a_info[1][0]
*(a_info + 1) + 5; // 指向a_info[1][5]
*(*(a_info + 1) + 5); // 访问元素,不再是“指向”,而是元素本身
参考《C和指针》第158页