在 C 語言中將陣列初始化為 0
Satishkumar Bharadwaj
2023年1月30日
2020年12月19日
本教程介紹瞭如何在 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} };