那个数组下标[]

个人边学边感悟,大家共勉。

int arr[4]={1,2,3,4};
当用cout<<arr[1]<<endl;时,输出为2 这里面的下标含义我是这么理解的:cout<<*(arr+1)<<endl; []的作用是对一个地址的解引用。我当时对这个东西想了很久。
当用作指向数组的指针时,这个理解就能帮你更好去解释复杂表达式了。
int *parr=&arr; 对arr取地址是得到整个数组的地址,而不是数组的首地址。
cout<<*parr[1]<<endl; 输出的是整个数组的后面那个地址中的值(把整个数组当成一个整体了,先结合了[] ,再作*运算),而不是想要的arr中的第2个值,*parr[2]当然指向的是再后面那个地址。
而 cout<<(*parr)[1]<<endl; 就是我们要的,其含义为 *parr取的是整个数组的地址,一般情况下它和数组首地址是相同的(还是要看你用在什么样的表达中),然后[1]这个东西指的是*((*parr)+1) ,含义为 *parr是一个地址,其值和数组首地址相同,然后这个地址偏移1个单位,得到arr数组第二个元素的地址,再对其解引用,得到第二个元素的值。
*parr[1];其含义为 *(*(parr+1))。 *(parr+1)这个是代表parr[1]
一定要理解表达式得到的是值还是地址,我发现很多人一用* 就会认为是值,很多表达式理解不了也可想而知了。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值