C中表达式的等价性

时间:2015-10-07 13:35:16

标签: c

这是一项关于测量C基础知识的作业和问题。 它是Coursera.org课程的一部分。但是,这只是衡量你是否能够完成课程。这只是实际问题的复制粘贴。 我在其他所有问题上做得很好,我似乎没有得到以下一个:

假设您正在编译32位平台并且sizeof(int)== 4.如果c的类型为int *且b的类型为int,则以下哪一项等效于c [b]?

可能的答案:

-1 * b[c]
*(c+b)
none of the above
*c+b
c[b][0]

我要问的是,上述可能性的答案是正确的,为什么? 我的意思是用什么逻辑来得出结果?我应该阅读什么来理解到达那里的程序?

2 个答案:

答案 0 :(得分:1)

*(c+b)

它被称为指针算术

答案 1 :(得分:1)

*(c+b)

这相当于c[b]

根据C99标准 -

  

6.5.2.1数组下标

     

约束

     

1.其中一个表达式应具有类型''指向完整对象类型'的指针,另一个表达式应具有整数类型,结果具有类型''type''。

     

语义

     

2后缀表达式后跟方括号[]中的表达式是数组对象元素的下标名称。下标运算符[]的定义是E1 [E2]与(*((E1)+(E2)))相同。由于适用于binary +运算符的转换规则,如果E1是数组对象(等效地,指向数组对象的初始元素的指针)并且E2是整数,则E1 [E2]指定E2的第E2个元素。 E1(从零开始计数)。