C语言中方括号浅见

2018-4-22更新:
今天发现了新东西,然后试了下,发现下面那个p[n]相当于* (p+n)的结论会导致一个非常有意思的东西,也就是:取某个数组元素比如arr[3]的时候,写成3[arr]也是完全可以编译通过的,因为 (arr+3)其实和 (3+arr)是一样的嘛!

很久没有写代码了,今天同学让解释一个指针相关的东西,想了好久才理清楚思路,这里做一下记录。

首先是关于(*p)[3]与 *p[3]的区别,这个网上很多,不再赘述,直接CTRL+CV

int* a[10];  //这里[ ]指定a是一个数组,元素类型为指针,即指针数组

int (*a)[10];//这里a虽然是指针,但是[ ]表明a指向的空间是数组类型,即a是数组指针

今天让我产生兴趣的主要还是关于方括号的作用,以前一直只以为方括号做数组下标用,今天做了一些小实验,加上搜索资料,写下个人的一点愚见。

先说结论:p[n]某种程度上相当于*(p+n)
下面是具体的实验代码:
实验代码
下面是实验结果:
运行结果

关于b,c分别是什么网上博客很多,开头亦提到过,不再赘述。
如果按照我以前的理解,方括号仅仅是数组下标的话,并无法解释为什么全部可以输出,根据输出结果,我猜测了一种可能,即:方括号实际上是对被操作的目标进行+n之后再取值,这可以由a[1][3]与( (a+1)+3)与a[1][3]相等而证实。
而这里的+n具体怎么加是由被操作目标决定的,具体可以比对a[0]a[1]a[5]等地址可以证实。
准备考研时间匆忙,加上仅仅是猜想,(其实如果时间多去找找看c语言的编译器如何处理方括号就一切明了了)写得不甚详细,如有建议,请评论指出,不胜感激。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值