【问题标题】:Inserting element in between in C array [duplicate]在C数组之间插入元素[重复]
【发布时间】:2013-01-23 22:31:25
【问题描述】:

可能重复:
Inserting characters in the middle of char array

我需要在静态数组的 2 个元素之间插入元素。我已经编写了以下代码。如果我们有比这更高效的代码,请告诉我。

int main()
{
    int a[4];

    a[0] = 10;
    a[1] = 20;
    a[2] = 30;

    int x = 15;

    memcpy(a+2,a+1,2);

    a[1] = x;

    printf("%d",a[2]);
}

【问题讨论】:

  • IIRC,你不能在memcpy中使用重叠的内存区域。
  • 另外,您必须以 bytes 为单位传递大小
  • 改用 memmove 来解决重叠问题。此外,您需要以字节为单位指定移动的长度,因此 2 * sizeof(a[0])
  • 如果你在 16 个字节内移动 anything,效率是无关紧要的。无论如何,这将花费大约 0.000000001 秒。
  • @Mordachai 谢谢。你说的对。我现在用过 memmove。

标签: c


【解决方案1】:

您过于担心低级优化 - 编译器会处理这个问题。

如果相信在这种情况下最明显的代码也是最快的:

a[3] = a[2];
a[2] = a[1];
a[1] = x;

没有比这更简单的了。


以下是编译器在优化代码时可以执行的示例:

https://stackoverflow.com/a/11639305/597607

(10 行源代码变成 4-5 条机器指令 - 让编译器完成它的工作!)。

【讨论】:

    猜你喜欢
    • 2016-12-12
    • 2013-02-12
    • 2013-10-24
    • 2018-02-04
    • 2013-12-06
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    • 2019-06-25
    相关资源
    最近更新 更多