char *p[2][3];
*(*(p+1)+1)[7]如何等于p[1][8][0]
我以为*(*(p+1)+1)[7]和*(*(*(p+1)+1)+7)是一样的,这等于p[1][1][7],我错在哪里了?
我不明白为什么这会被否决.
发布于 2015-10-29 21:55:58
基本事实:
[] 联营从左到右[]比取消引用操作符*具有更高的优先a[i]是*(a+i)所以
*(*(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发布于 2015-10-29 21:56:22
这取决于[]相对于一元*的相对优先级(前者更高),如果p是(或计算为)指针,而n是整数类型,则p[n]的基本标识与*(p + n)的含义相同。因此,您可以根据以下步骤转换起始表达式,在两个方向重复使用该标识:
*(*(p+1)+1)[7]*((*(p+1)+1)[7]) (添加的括号显式表示运算符优先级)。*((p[1]+1)[7])*(*((p[1]+1)+7))*(*(p[1]+1+7))*(*(p[1]+8))*(p[1][8])*(p[1][8] + 0)p[1][8][0]发布于 2015-10-29 21:55:32
*(*(p+1)+1)[7]
= *(p[1] + 1)[7]由于运算符优先级( []大于*),该表达式
= *((p[1] + 1)[7])
= *(*((p[1] + 1 + 7))
= *(*(p[1] + 8 ))
= *(p[1][8])
= p[1][8][0]https://stackoverflow.com/questions/33425160
复制相似问题