编辑:之前提出的类似问题并没有涉及到与此问题相关的一些观点。
在Kernighan和Ritchie的ANSI C书籍中,他们说以下两种写法是等价的:
a[i]
*(a+i)
我不明白对于占用多个地址空间的元素(例如结构体)来说,这怎么可能是正确的。
请解释一下?编辑:感谢所有的回答,但我还是不太理解。看起来我和@CucumisSativus有同样的困惑,因为他的回答和评论中都提到了这个问题。
假设sizeof(*a)
是3。如果由于某种原因我想访问a中第一个元素的中间字节,我认为应该这样做:*(a+1)
。
假设a
的地址是10,每个元素的大小是20。我们想要获取指向第二个元素的指针。据我所知,我们可以这样做:p = (10 + 20)。我认为这等价于&a[1]
。
我真的很难解释我不理解的地方!!
[]
在标准中已经被定义,没有太多需要解释的。 - Yu Hao