有人可以解释如何在 C 编程中将元素附加到数组中吗?

Posted

技术标签:

【中文标题】有人可以解释如何在 C 编程中将元素附加到数组中吗?【英文标题】:Can someone explain how to append an element to an array in C programming? 【发布时间】:2014-11-30 06:33:47 【问题描述】:

如果我想将一个数字附加到一个初始化为 int 的数组中,我该怎么做?

int arr[10] = 0, 5, 3, 64;
arr[] += 5; //Is this it?, it's not working for me...

最后我想要 0,5,3,64,5。

我习惯了 Python,在 Python 中有一个名为 list.append 的函数,它会自动为您将一个元素附加到列表中。 C语言中是否存在这样的功能?

【问题讨论】:

数组大小应该被初始化为包含这个额外的元素 如果你有足够的内存,你可以像这样 arr[4] = 5 简单地追加 列表和数组是非常不同类型的容器。数组是一个连续的内存块,如果要追加一个元素,则必须将其写入最后占用位置之后的位置,前提是数组足够大。 您是否打算使用一个在添加其他元素时会增长的数组?在 C++ 中,您可以使用 std::vector,但 C 不提供类似的功能。您将不得不手动分配额外的内存。 【参考方案1】:
int arr[10] = 0, 5, 3, 64;
arr[4] = 5;

编辑: 所以我被要求解释当你这样做时发生了什么:

int arr[10] = 0, 5, 3, 64;

您创建一个包含 10 个元素的数组,并为数组的前 4 个元素分配值。

还请记住,arr 从索引 arr[0] 开始并在索引 arr[9] 结束 - 10 个元素

arr[0] has value 0;
arr[1] has value 5;
arr[2] has value 3;
arr[3] has value 64;

之后数组包含垃圾值/零,因为您没有分配任何其他值

但你仍然可以再分配 6 个值,所以当你这样做时

arr[4] = 5;

您将值 5 分配给数组的第五个元素。

在为arr 的最后一个索引(即arr[9])分配值之前,您可以这样做;

对不起,如果我的解释不连贯,但我从来都不擅长解释事情。

【讨论】:

请编辑您的问题以添加对您的代码如何工作以及它如何解决 OP 问题的解释。 SO 上的许多发帖者都是新手,不会理解您发布的代码。 这不是附加 OP 所指的类型。追加是在不使用其索引的情况下添加到数组的末尾。 这个答案被选为正确,但实际上并不正确。还是这个问题在一段时间后被编辑,所以答案看起来不合适? 你能用 arr[sizeof(arr)+1] = 5;【参考方案2】:

将值放入数组只有两种方法,一种只是另一种的语法糖:

a[i] = v;
*(a+i) = v;

因此,要将某些东西作为索引 4 处的元素,您别无选择,只能arr[4] = 5

【讨论】:

数组似乎被声明为int arr[10],提供了足够的空间。 @GregHewgill:显然,我是盲人。谢谢。 第四个元素在arr[3] no? @Musa:我从第 0 个开始计数 :) 虽然我理解您所说的 '4th' 是指 0th、1st、2nd、3rd、4th 的意思——但措辞 有点误导...跨度> 【参考方案3】:

您可以有一个计数器 (freePosition),它将跟踪大小为 n 的数组中的下一个空闲位置。

【讨论】:

在这之后你可以做。 if(freePosition【参考方案4】:

对于可能仍会看到此问题的某些人,还有另一种方法可以在 C 中附加另一个数组元素。您可以参考 this 博客,其中显示了有关如何在 C 中附加另一个元素的 C 代码你的array

但您也可以使用memcpy() 函数来附加另一个数组的元素。你可以像这样使用memcpy()

#include <stdio.h>
#include <string.h>

int main(void)


int first_array[10] = 45, 2, 48, 3, 6;
int scnd_array[] = 8, 14, 69, 23, 5;

// 5 is the number of the elements which are going to be appended
memcpy(a + 5, b, 5 * sizeof(int));

// loop through and print all the array
for (i = 0; i < 10; i++) 
    printf("%d\n", a[i]);
  


【讨论】:

为什么将数组命​​名为first_arrayscnd_array,然后使用ab【参考方案5】:

如果您有类似的代码 int arr[10] = 0, 5, 3, 64; ,并且您想将值附加或添加到下一个索引,只需键入 a[5] = 5 即可添加它。

这样做的主要优点是您可以将值添加或附加到不需要继续的任何索引,例如如果我想将值 8 附加到索引 9,我可以通过上述概念先于指数前填充。 但是在 python 中使用list.append() 你可以通过持续索引来做到这一点。

【讨论】:

【参考方案6】:

简短的回答是:您别无选择,只能:

arr[4] = 5;

【讨论】:

以上是关于有人可以解释如何在 C 编程中将元素附加到数组中吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Userdefaults (SwiftUI) 中将新元素附加到数组

如何在golang中将字节附加到字节数组?不是字节数组到字节数组切片等[重复]

IDL中如何定义 动态数组?

如何在golang中将切片附加到字节数组

如何在 RxSwift 中将值附加到观察到的数组

如何在 Objective-C 中将值附加到数组