数组指针定义的理解

定义一个数组

int a[4]={0,1,2,3};
再定义一个数组指针int (*p)[4]=&a;

  这里使用&a,而不使用a,是因为数组是c内嵌数据类型,它代表整个数组,而a仅代表数组首元素地址,虽然printf打印出地址是相同的,但含义不同。

 
 
这里定义需要两个表达式数据类型对应,数组指针应该指向整个数组,同理,定义int *p,就应该使p=a了。
延伸一下,怎么用一个一维的数组指针访问二维数组呢?
定义一个二维数组
int b[2][2]={0,1,2,3}
int (*q)[2]=b;
这里用b,而不用&b,也是数据类型对应的需要,首先二维数组可以看做若干行一位数组,而b则代表了首行一位数组,&b则代表整个二维数组,但是我们的
数组指针只是一维的,所以用b,如果用printf打印b+1和&b+1可以看到b+1跨过的是一行一维数组所占字节,而&b+1则跨过整个二维数组所占字节,q+1与
b+1相同。
综上,定义指针时要遵循数据类型匹配。(个人理解,可能有误)

 

转载于:https://www.cnblogs.com/myJune/p/5355346.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值