在 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