如何将数组中的所有元素设置为零或任意相同的值?

25

我是一个C语言的初学者,我真的需要一种有效的方法来将数组中所有元素设置为零或任何相同的值。我的数组非常长,因此我不想使用for循环来完成。


1
只是问一下--你是否尝试使用循环?通常性能焦虑是没有根据的。你的数组有多少个元素?它会被初始化多少次?(正如答案中所讨论的那样,只有在数组元素需要用一个非0值进行初始化时才需要这样做。) - Peter - Reinstate Monica
1
据我理解,您希望在初始化时将值设置为零或任何其他值,而不仅仅是这样。如果是这样,那么这不是重复内容。 - Giorgi Gvimradze
1
不应该关闭为重复问题。所引用的问题是关于“初始化”的,而这个问题是关于“设置”的,它也可能适用于现有的数组。 - Snackoverflow
4个回答

29

如果您的数组有静态存储分配,则默认初始化为零。然而,如果该数组具有自动存储分配,则可以使用包含零的数组初始化器列表来简单地将其所有元素初始化为零。

// function scope
// this initializes all elements to 0
int arr[4] = {0};
// equivalent to
int arr[4] = {0, 0, 0, 0};

// file scope
int arr[4];
// equivalent to
int arr[4] = {0};
请注意,使用仅包含单个元素(值)的初始化器列表初始化数组元素为非零值时,没有标准方法可供使用。您必须使用初始化程序列表显式初始化数组的所有元素。
// initialize all elements to 4
int arr[4] = {4, 4, 4, 4};
// equivalent to
int arr[] = {4, 4, 4, 4};

符合标准(c99)的定义int x[] = { 1, 3, 5 };不算作单个语句的初始化吗? - Peter - Reinstate Monica
@PeterSchneider 谢谢您,我已经纠正了令人困惑的那一行。 - ajay
初始化已经讨论了很多次。问题是,你如何将相同的值分配给数组? - overexchange
1
@overexchange 在初始化期间才能将相同的值分配给数组。 - ajay
如果您的数组具有静态存储分配,则默认情况下不会初始化为零。 - ishmael
如何将已声明的数组设置为全零?这只是初始化的一种方式。 - Snackoverflow

14

如果您确定长度,可以使用memset。

memset(ptr, 0x00, length)


11
int myArray[10] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 }; // All elements of myArray are 5
int myArray[10] = { 0 };    // Will initialize all elements to 0
int myArray[10] = { 5 };    // Will initialize myArray[0] to 5 and other elements to 0
static int myArray[10]; // Will initialize all elements to 0
/************************************************************************************/
int myArray[10];// This will declare and define (allocate memory) but won’t initialize
int i;  // Loop variable
for (i = 0; i < 10; ++i) // Using for loop we are initializing
{
    myArray[i] = 5;
}
/************************************************************************************/
int myArray[10] = {[0 ... 9] = 5}; // This works only in GCC

1
如果您的数组是静态或全局的,则在main()开始之前将其初始化为零。 这将是最有效的选项。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接