Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中连接两个数组?_C_Algorithm_Arrays_Concatenation - Fatal编程技术网

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

如何在C中连接两个数组?,c,algorithm,arrays,concatenation,C,Algorithm,Arrays,Concatenation,如何连接两个数组以获得包含两个原始数组元素的单个数组?C中的数组只是一个连续的内存区域,指针指向它们的开始*。因此,合并它们包括: 找到数组A和B的长度,(您可能需要知道元素的数量和每个元素的大小) 分配(malloc)一个大小为a+B的新数组C 将内存从A复制(memcpy)到C 将内存从B复制到C+A的长度(参见1) 您可能还希望取消分配(释放)A和B的内存 请注意,这是一个昂贵的操作,但这是基本理论。如果您使用的是提供某种抽象的库,那么您可能会更好。如果A和B比简单数组(例如,排序数组)更

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

C中的数组只是一个连续的内存区域,指针指向它们的开始*。因此,合并它们包括:

  • 找到数组A和B的长度,(您可能需要知道元素的数量和每个元素的大小)
  • 分配(
    malloc
    )一个大小为a+B的新数组C
  • 将内存从A复制(
    memcpy
    )到C
  • 将内存从B复制到C+A的长度(参见1)
  • 您可能还希望取消分配(
    释放
    )A和B的内存
  • 请注意,这是一个昂贵的操作,但这是基本理论。如果您使用的是提供某种抽象的库,那么您可能会更好。如果A和B比简单数组(例如,排序数组)更复杂,则需要执行比步骤3和4更智能的复制(请参阅:)


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

    用指针指向起点的“…从哪里来的?”?当我声明
    inta[10]
    时,我得到一个连续的内存区域,里面有10
    int
    ,没有任何指针。@AndreyT:
    a
    是你的指针。你在对另一个答案的评论中似乎意识到了这一点…@Shog9:
    a
    不是指针
    a
    是一个数组。当数组类型衰减为指针类型时,结果指针只是一个中间临时值,与
    a
    无关。上面的Wnat声明是不正确的,除非它特别提到了
    malloc
    ed数组。有点迂腐,是吗?就所描述的算法而言,这没有什么区别(除了在基于堆栈的数组的情况下有必要跳过步骤#5)。声明数组不是指针甚至一点也不迂腐。这是一个相当流行和恼人的误解,所以在这里推广绝对不是一个好主意。是的。。。因为这两个答案似乎都是对“串联”解释的回应,而OP没有回来澄清,所以我编辑了这个问题以反映这一点。