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

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

本文关键字:Func ptr 什么 区别 之间 gt      更新时间:2023-10-16

或者两者相等?ptr是指向结构数组的指针。

UPD:感谢大家的回复。对不起,我把语法拼错了。我想比较的是(ptr + i)->Func()(&ptr[i])->Func()。我对&运算符感到困惑,因为它应该返回变量的地址。这不是又导致了一次获取该地址的操作吗?

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

由于运算符的优先级,&ptr[i].Func()等效于&(ptr[i].Func()),也就是说,它取Func()的返回值的地址。

没有区别。CCD_ 9被标准保证为完全等同于CCD_。前者通常更容易阅读。

您可能是指&ptr[i]->Func(),否则您的表达式就没有相同的功能。

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

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

最后一件物品只是作为一种好奇。不要在编程谜题之外的代码中使用此构造。

我假设结构或类具有Func函数。因此,通过地址访问函数和访问字段是一样的。在我看来,这只是解决算术上的差异。所以他们两个是平等的。