浅析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页

猜你喜欢

转载自www.cnblogs.com/qianxiaolingyun/p/11784495.html