web-dev-qa-db-ja.com

配列のすべての要素をゼロまたは同じ値に設定する方法は?

私は[〜#〜] c [〜#〜]の初心者であり、配列のすべての要素をゼロまたは同じ値に設定するための効率的な方法が本当に必要です。配列が長すぎるので、forループを使用したくありません。

10
user3610709

配列に静的ストレージ割り当てがある場合、デフォルトでゼロに初期化されます。ただし、配列に自動ストレージ割り当てがある場合、ゼロを含む配列初期化リストを使用して、すべての要素をゼロに初期化することができます。

// 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};
16
ajay
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
7
user1814023

長さが確かな場合は、memsetを使用できます。

memset(ptr、0x00、長さ)

5
Sawan

配列が静的またはグローバルの場合、main()が開始する前にゼロに初期化されます。それが最も効率的なオプションです。

1