【发布时间】:2014-07-21 08:53:19
【问题描述】:
如果我有两个相同大小的数组,比如说,
int pa1[100];
int pa2[100];
我知道,如果在代码中的某个时刻,我想将 pa2 的内容复制到 pa1 中,
pa1 = pa2;
不是正确的方法。相反,我可以使用一个循环。但是我在想,如果我有两个结构指针(ps1,ps2),那么写是有效的:
*ps1 = *ps2;
如果该结构包含一个 100 int 数组,并且我让 ps1 和 ps2 分别指向 pa1 和 pa2,那么前面的指令与复制数组中每个元素的循环有什么区别?
for (int i = 0; i<100; i++) pa1[i] = pa2[i];
它有任何性能差异吗?为什么?
我的第一个猜测是使用指针比使用循环更好,但我不确定。我尝试进行网络搜索但没有成功,可能是因为我找不到准确的词语来描述我想知道的内容。
【问题讨论】:
-
现代编译器可能会将您的两个选项视为相同的操作,并且应该发出相同或相似的代码。在这种情况下最好编写可读性代码。第二个最佳选择是显式调用
memcpy(),编译器也可能优化掉它。