指针数组 数组指针

今天看到一个问题: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。因为它们的类型匹配。数组的数组与数组的指针可以,指针数组与指针的指针可以。

还看到一句话:[  ]比  *  的优先级高,有道理。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值