c - 如何在 C 中连接两个数组?

标签 c algorithm arrays concatenation

如何连接两个数组以获得包含两个原始数组元素的单个数组?

最佳答案

C 中的数组只是一个连续的内存区域,带有一个指向它们起始位置的指针*。所以合并它们涉及:

  1. 找出数组 A 和 B 的长度,(您可能需要知道元素的数量和每个元素的 sizeof)
  2. 分配 (malloc) 一个大小为 A + B 的新数组 C。
  3. 将内存从A复制(memcpy)到C,
  4. 将内存从 B 复制到 C + A 的长度(见 1)。
  5. 您可能还想取消分配(释放)A 和 B 的内存。

请注意,这是一个昂贵的操作,但这是基本理论。如果您使用的库提供了一些抽象,您可能会过得更好。如果 A 和 B 比简单数组(例如排序数组)更复杂,则您需要进行比第 3 步和第 4 步更智能的复制(参见:how do i merge two arrays having different values into one array)。


  • 尽管出于这个问题的目的,指针解释就足够了,严格来说(并且为了安抚下面的评论者):C 数组的概念,可以在没有语法的情况下使用的指针。然而,在实现方面,C 数组和连续的内存区域(带有指针)非常接近,它们可以并且经常可以互换使用。

关于c - 如何在 C 中连接两个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1696074/

相关文章:

无法用 C 中的文本文件中的数据填充数组

java - 分配算法/可用性算法

algorithm - 是否有一个好的整数线光栅化算法?

algorithm - 数组中最常见的元素/确定性地在 O(n) 时间和 O(1) 空间中找到相对多数?

javascript - 全局变量表示未定义 - js

c - 变量点等于数组中的元素

c - 将数组传递给具有奇数格式的函数 - "v+last+1"

c++ - 如何在 C 中获得到核心映射的进程?

c - 当 ZMQ_FD option_val 的本地地址通过时,zmq_getsockopt 在 Windows x64 上返回 EINVAL

java - 3D多维数组输出与初始化数据不匹配