在书里,《理解和使用 C 指针》作者:理查德·里斯 http://shop.oreilly.com/product/0636920028000.do第85页说,
int vector[5] = {1, 2, 3, 4, 5};
生成的代码是vector[i]
与生成的代码不同*(vector+i)
。符号vector[i]
生成从位置向量开始的机器代码,moves i
从此位置定位并使用其内容。符号*(vector+i)
生成从位置开始的机器代码vector
, adds i
到地址,然后使用该地址的内容。虽然结果相同,但生成的机器代码不同。这种差异对于大多数程序员来说并不重要。
您可以看到。这段话的意思是什么?在什么情况下编译器会为这两者生成不同的代码?从基础“移动”和“添加”到基础之间有区别吗?我无法让它在 GCC 上工作——生成不同的机器代码。
引用是错误的。这十年来,这样的垃圾仍然出版,真是可悲。事实上,C 标准定义了x[y]
as *(x+y)
.
本页后面关于左值的部分也是完全错误的。
恕我直言,使用这本书的最佳方法是将其放入回收箱或烧毁。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)