首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >`*(*(p+1)+1)[7]`等于`p[1][8][0]`?

`*(*(p+1)+1)[7]`等于`p[1][8][0]`?
EN

Stack Overflow用户
提问于 2015-10-29 21:43:50
回答 3查看 168关注 0票数 3

char *p[2][3];

*(*(p+1)+1)[7]如何等于p[1][8][0]

我以为*(*(p+1)+1)[7]*(*(*(p+1)+1)+7)是一样的,这等于p[1][1][7],我错在哪里了?

我不明白为什么这会被否决.

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-29 21:55:58

基本事实:

  1. [] 联营从左到右
  2. []比取消引用操作符*具有更高的优先
  3. a[i]*(a+i)

所以

代码语言:javascript
复制
  *(*(p+1)+1)[7] 
= *((*(p+1)+1)[7])   // rule 2
= *(*(*(p+1)+1+7))   // rule 3
= *(*(*(p+1)+8))    
= *(*(*(p+1)+8)+0)  
= p[1][8][0]         // rules 1 and 3
票数 6
EN

Stack Overflow用户

发布于 2015-10-29 21:56:22

这取决于[]相对于一元*的相对优先级(前者更高),如果p是(或计算为)指针,而n是整数类型,则p[n]的基本标识与*(p + n)的含义相同。因此,您可以根据以下步骤转换起始表达式,在两个方向重复使用该标识:

  1. *(*(p+1)+1)[7]
  2. == *((*(p+1)+1)[7]) (添加的括号显式表示运算符优先级)。
  3. == *((p[1]+1)[7])
  4. == *(*((p[1]+1)+7))
  5. == *(*(p[1]+1+7))
  6. == *(*(p[1]+8))
  7. == *(p[1][8])
  8. == *(p[1][8] + 0)
  9. == p[1][8][0]
票数 2
EN

Stack Overflow用户

发布于 2015-10-29 21:55:32

代码语言:javascript
复制
  *(*(p+1)+1)[7]
= *(p[1] + 1)[7]

由于运算符优先级( []大于*),该表达式

代码语言:javascript
复制
= *((p[1] + 1)[7])
= *(*((p[1] + 1 + 7))
= *(*(p[1] + 8 ))
= *(p[1][8])
=  p[1][8][0]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33425160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档