Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Array initialization with {0}, {0,}?

Say I want to initialize myArray

char myArray[MAX] = {0};   char myArray[MAX] = {0,};   char myArray[MAX]; memset(myArray, 0, MAX);   

Are they all equal or any preferred over another?

Thank you

like image 720
eugene Avatar asked Apr 08 '11 06:04

eugene


People also ask

How do you initialize an array with 0?

Using Initializer List. int arr[] = { 1, 1, 1, 1, 1 }; The array will be initialized to 0 if we provide the empty initializer list or just specify 0 in the initializer list.

Can array be initialized with zero size?

No, stuff will be an empty array of strings, not an empty string.

Why do we initialize array with 0?

The array will be initialized to 0 in case we provide empty initializer list or just specify 0 in the initializer list. Designated Initializer: This initializer is used when we want to initialize a range with the same value. This is used only with GCC compilers.

Are arrays in C initialized to 0?

Please note that the global arrays will be initialized with their default values when no initializer is specified. For instance, the integer arrays are initialized by 0 . Double and float values will be initialized with 0.0 . For char arrays, the default value is '\0' .


2 Answers

Actually, in C++, I personally recommend:

char myArray[MAX] = {}; 

They all do the same thing, but I like this one better in C++; it's the most succinct. (Unfortunately this isn't valid in C.)

By the way, do note that char myArray[MAX] = {1}; does not initialize all values to 1! It only initializes the first value to 1, and the rest to zero. Because of this, I recommend you don't write char myArray[MAX] = {0}; as it's a little bit misleading for some people, even though it works correctly.

like image 124
user541686 Avatar answered Sep 30 '22 17:09

user541686


They are equivalent regarding the generated code (at least in optimised builds) because when an array is initialised with {0} syntax, all values that are not explicitly specified are implicitly initialised with 0, and the compiler will know enough to insert a call to memset.

The only difference is thus stylistic. The choice will depend on the coding standard you use, or your personal preferences.

like image 41
Sylvain Defresne Avatar answered Sep 30 '22 18:09

Sylvain Defresne