在 C 语言中将数组初始化为 0

Satishkumar Bharadwaj 2023年10月12日
  1. 使用 C 的库函数 memset()
  2. C 语言中初始化数组为 0 以外的值
在 C 语言中将数组初始化为 0

本教程介绍了如何在 C 语言中将数组初始化为 0。

C 语言中数组的声明如下。

char ZEROARRAY[1024];

它在运行时在全局范围内变成全部为 0。如果它是一个本地数组,有一个简单方法。数组的声明和初始化如下。

char ZEROARRAY[1024] = {0};

如果一个数组被部分初始化,未初始化的元素将收到相关数据类型的值 0。编译器将用 0 填充未写入的元素。

如果没有指定初始化器,那么具有静态存储的对象将初始化为 0,声明如下。

static int myArray[10];

如果初始化列表为空或者在初始化列表中指定了 0,数组将被初始化为 0。声明如下:

int number[5] = {};
int number[5] = {0};

初始化数组最简单的方法是遍历所有元素并将每个元素设置为 0

#include <stdio.h>

int main(void) {
  int numberArray[10], counter;

  for (counter = 0; counter < 5; counter++) {
    numberArray[counter] = 0;
  }
  printf("Array elements are:\n");
  for (counter = 0; counter < 5; counter++) {
    printf("%d", numberArray[counter]);
  }
  return 0;
}

输出:

Array elements are:
00000

使用 C 的库函数 memset()

函数 memset()string.h 中的一个库函数。它用来用一个特定的值填充一个内存块。

memset() 函数的语法如下。

void *memset(void *pointerVariable, int anyValue, size_t numberOfBytes);

其中,

  • pointerVariable 是指向要填充的内存块的指针变量。
  • anyValue 是要设置的值。这是一个整数值,但函数使用这个值的无符号 char 转换来填充内存块。
  • numberOfBytes 是要设置的值的字节数。

该函数返回一个指向内存区 pointerVariable 的指针。

完整的程序如下。

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

void printArrayvalues(int anyArray[], int anyNumber) {
  int index;
  for (index = 0; index < anyNumber; index++) printf("%d ", anyArray[index]);
}

int main(void) {
  int number = 10;
  int arrayValues[number];

  memset(arrayValues, 0, number * sizeof(arrayValues[0]));
  printf("Array after memset()\n");

  printArrayvalues(arrayValues, number);

  return 0;
}

输出:

Array after memset()
0 0 0 0 0 0 0 0 0 0 

C 语言中初始化数组为 0 以外的值

gcc 将一个数组初始化为 0 以外的值,如下所示。

int myArrayValues[1024] = {[0 ... 1023] = -1};

数组中的每个成员都可以通过省略维度来显式初始化。声明如下。

int myArrayValues[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};

编译器将从初始化器列表中推导出维度,对于多维数组,只能省略最外层的维度。

int myPoints[][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

相关文章 - C Array