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

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

#1楼 票数:8

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

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

#2楼 票数:2

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

#3楼 票数:1

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

#4楼 票数:1 已采纳

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

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

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

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

  ask by Serge B translate from so

未解决问题?本站智能推荐:

2回复

MPI_Send() 和 MPI_Isend() 后跟 MPI_Wait() 有什么区别?

我无法理解MPI_Send()和MPI_Send() MPI_Isend()后跟MPI_Wait()之间的区别。 是不是当我们使用MPI_Wait()后MPI_Isend()我们把它变成一个阻塞调用? 因为我们必须等到所有元素都复制到缓冲区中。 我知道这个配置(下面给出)可能会导致死锁 但是
4回复

为台式机和超级计算机编写的代码有什么区别?

假设,如果我的科学工作导致功能/模块/子程序(在桌面上)的开发,我需要知道将其纳入大型模拟中以在超级计算机上运行(可能模拟分子) ,液体,反应等)? 我的印象是,它可能与利用某些库(例如,BLAS,LAPLACK)尽可能,修改算法(减少迭代),分析,并行化,考虑内存 - 硬盘处理器的使用/
2回复

使用OpenMP重叠计算和通信或I / O

我正在一个HPC项目中,在这里我正在处理磁盘中的TB数据。 基本流程(如果通过在每个节点上导入数据的子集表示)。 生成大量其他数据并累积结果,然后导出结果。 I / OI需要做的事很大,几乎要花与计算一样多的时间。 我希望交错计算和通信。 我真的只知道OpenMP。 下面是我尝试的伪
1回复

MPI中的MPI_Type_struct和MPI_Type_create_struct有什么区别?

我已经看到这两个命令都用于创建用于在MPI中发送和接收消息的数据类型。 据我了解,采用相同的输入参数,给定较旧的参数,它们将返回一种新的数据类型。 那么有什么区别?何时应该使用一个而不是另一个?
3回复

(* ptr).f()和ptr-> f()之间有什么区别? [重复]

可能重复: C ++ - (*)之间的差异。 和 - >? 这有什么区别: 和这个: 在c ++中,ptr是一个指向C ++类的指针,它有一个函数f ?
1回复

pthread_spinlock和boost :: smart_ptr :: spinlock之间的区别?

我在boost::smart_ptr找到了以下自旋锁代码: 因此,如果我正确地理解这一点,当锁争用时,传入的线程将以指数方式退避,首先疯狂地旋转,然后暂停,然后产生剩余的时间片,最后在睡眠和屈服之间翻转。 我还发现了glibc pthread_spinlock实现,它使用程序集来执
5回复

ptr和&ptr之间的区别

我编写了一个简单的C ++程序,如下所示: 前两个语句有什么区别。 两者都给一个地址。 由于new运算符在堆中保留了一个内存,因此该语句给出了堆中动态保留的内存的地址ptr或&ptr 。 现在,如果我们这样做: 这将释放先前在堆中动态保留的内存,但&ptr仍
8回复

func(int¶m)和func(int * param)之间有什么区别?

在下面的代码中, amp_swap()和star_swap()似乎都在做同样的事情。 那么为什么有人喜欢使用一个而不是另一个呢? 哪一个是首选符号,为什么? 或者只是品味问题? 谢谢你的时间! 也可以看看 C ++中指针变量和引用变量之间的区别