[英]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.