指针数组 数组指针
2014-08-28 16:14
246 查看
今天看到一个问题:int a[3][3];int **p;p=a;会不会有问题?
貌似觉得没问题,还是知识的基础和本质没有掌握透彻的原因。
分析:二维数组实质上是数组的数组,可以退化为数组的指针,但不是指针的指针。
比如:int a[3][3],如果写在形参里,可以写成int (*p)[3],但不是 int **p。
上题中,int a[3][3]中的a的类型是(*)[3],而p的类型是**,它们的类型并不匹配,所以不可以p=a。
可以修改为:int a[3][3];int (*p)[3];p=&a;
1)int a[3][3]; 数组的数组,a指向 int [3][3]
2)int p1[][3]; p1指向 int [][3],只要每行3个int即可。
3)int *p2[3]; 指针数组,即数组p2[3]是int *型的,数组的每个元素都是一个指针。
4)int (*p3)[3]; 数组指针(行指针)。
5)int **p4; 指针的指针。
可以如下赋值:p3=p1;p4=p2。因为它们的类型匹配。数组的数组与数组的指针可以,指针数组与指针的指针可以。
还看到一句话:[ ]比 * 的优先级高,有道理。
貌似觉得没问题,还是知识的基础和本质没有掌握透彻的原因。
分析:二维数组实质上是数组的数组,可以退化为数组的指针,但不是指针的指针。
比如:int a[3][3],如果写在形参里,可以写成int (*p)[3],但不是 int **p。
上题中,int a[3][3]中的a的类型是(*)[3],而p的类型是**,它们的类型并不匹配,所以不可以p=a。
可以修改为:int a[3][3];int (*p)[3];p=&a;
1)int a[3][3]; 数组的数组,a指向 int [3][3]
2)int p1[][3]; p1指向 int [][3],只要每行3个int即可。
3)int *p2[3]; 指针数组,即数组p2[3]是int *型的,数组的每个元素都是一个指针。
4)int (*p3)[3]; 数组指针(行指针)。
5)int **p4; 指针的指针。
可以如下赋值:p3=p1;p4=p2。因为它们的类型匹配。数组的数组与数组的指针可以,指针数组与指针的指针可以。
还看到一句话:[ ]比 * 的优先级高,有道理。
相关文章推荐
- 函数指针和指针函数 数组指针和指针数组
- 【笔试面试知识点查缺补漏深入理解之C与C++篇】C语言中的指针数组与数组指针
- [转] 彻底了解指针数组,数组指针,以及函数指针,以及堆中的分配规则
- 理解 指针数组 数组指针 函数指针 函数指针数组 指向函数指针数组的指针
- 指针数组、数组指针、函数指针、指针函数总结C++
- 指针数组、数组指针等变量的声明
- 二维数组和指针 和指针数组,数组指针
- c语言011---数组指针与指针数组
- C语言学习笔记.指针4--数组指针和指向数组的指针变量(一)
- 指针数组和数组指针
- 彻底了解指针数组,数组指针,以及函数指针,以及堆中的分配规则
- C++中new和delete在数组指针和指针数组中的调用
- 彻底了解指针数组,数组指针,以及函数指针,以及堆中的分配规则
- 数组指针和指针数组
- 数组,指针数组,数组指针,函数指针数组,函数指针数组的指针
- 彻底了解指针数组,数组指针,以及函数指针,以及堆中的分配规则
- 【C语言提高35】数组指针和指针数组
- 数组指针和指针数组
- C语言数组指针(指向数组的指针)