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

osa*_*ama 8 c arrays algorithm concatenation

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

Che*_*evy 26

C中的数组只是一个连续的内存区域,指向它们的start*.因此合并它们涉及:

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

请注意,这是一项昂贵的操作,但这是基本理论.如果您使用的是提供抽象的库,那么您可能会感觉更好.如果A和B比一个简单的数组(例如排序的数组)更复杂,则需要进行更智能的复制,然后执行步骤3和步骤4(请参阅:如何将具有不同值的两个数组合并到一个数组中).


  • 虽然这个问题的目的,指针解释就足够了,严格来说(和抚慰以下评论者):C 具有一个阵列,其能够在不指针的语法中使用的概念.然而,实现明智的是,C数组和连续的内存区域,指针足够接近它们可以并且通常可以互换使用.

  • @AndreyT:`a`是你的指针.您似乎在对另一个答案的评论中意识到这一点...... (2认同)
  • 声明数组不是指针“甚至一点也不”迂腐。这是一个相当流行且令人讨厌的误解,因此在这里推广它绝对不是一个好主意。 (2认同)