繁体   English   中英

(ptr + i) - > Func()和&ptr [i] .Func()之间有什么区别吗?

[英]Is there any difference between (ptr + i)->Func() and &ptr[i].Func()

或者两者都是平等的? ptr是一个指向结构数组的指针。

UPD:谢谢大家的回复。 对不起,我拼错了语法。 我想要比较的是(ptr + i)->Func() vs (&ptr[i])->Func() 我与一个&运算符混淆,因为它应该返回一个变量的地址。 是否会导致再次采取该地址的操作?

(ptr + i)->Func()等同于ptr[i].Func()

并且由于运算符优先级, &ptr[i].Func()等效于&(ptr[i].Func()) ,即它需要一个Func()返回值的地址。

没有区别。 ptr[i]由标准保证完全等同于*(ptr+i) 前者通常更容易阅读。

我假设struct或类具有Func函数。 因此,按地址访问功能与访问该字段的功能相同。 在我看来,它只是地址算术差异。 所以? 两者都是平等的。

你可能意味着&ptr[i]->Func() ,否则你的表达式没有相同的功能。

根据C ++标准,将指针类型的值添加到整数类型的值会产生与原始相同类型的指针,其偏移量等于整数类型的值。 取一个ptr[offset]的地址产生相同的值,因此两者是相同的。 此外,添加的顺序无关紧要,因此下面的所有表达式都做同样的事情,并且应该生成相同的可执行代码:

&ptr[i]
(ptr+i)
(i+ptr)
&(i[ptr]) // <<== Don't do this!

最后一项仅作为好奇心。 不要在编程谜题之外的代码中使用此构造。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM