数组指针定义的理解

定义一个数组
int a[4]={0,1,2,3};
再定义一个数组指针<pre name="code" class="cpp">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相同。
综上,定义指针时要遵循数据类型匹配。(个人理解,可能有误)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值