这是一个测量C基础知识的作业和问题,它是Coursera.org课程的一部分。但是,这只是为了衡量你是否能够完成这门课程。这只是一个复制粘贴的实际问题。我在所有其他问题上都做得很好,只是我似乎没有理解以下的问题:
假设您正在编译一个32位平台和== 4 ( int )。如果c是int*类型,b是int类型,那么以下哪一项等同于cb?
可能的答案:
-1 * b[c]
*(c+b)
none of the above
*c+b
c[b][0]
我要问的是,从上述可能性中得到正确的答案是什么,为什么呢?我的意思是,用什么逻辑来得出结果呢?我应该读些什么才能理解到达那里的程序?
发布于 2015-10-07 05:39:47
*(c+b)
这相当于c[b]
。
根据C99标准-
6.5.2.1数组订阅 约束条件 1.其中一个表达式应具有类型‘’指针以完成对象类型‘’,另一个表达式应具有整数类型,而结果应具有‘类型’类型。 语义学 2后缀表达式后面跟着方括号[]中的表达式是数组对象元素的下标指定。下标运算符[]的定义是E1E2与(*((E1)+(E2))相同)。由于应用于二进制+运算符的转换规则,如果E1是数组对象(等价地,指向数组对象的初始元素的指针),而E2是整数,则E1E2指定E1的第E2元素(从零计数)。
发布于 2015-10-07 05:39:25
*(c+b)
它被称为指针算术。
https://stackoverflow.com/questions/32993665
复制相似问题