how does array[100] = {0} set the entire array to 0?


Question

How does the compiler fill values in char array[100] = {0};? What's the magic behind it?

I wanted to know how internally compiler initializes.

1
140
4/24/2014 8:15:35 AM

Accepted Answer

It's not magic.

The behavior of this code in C is described in section 6.7.8.21 of the C specification (online draft of C spec): for the elements that don't have a specified value, the compiler initializes pointers to NULL and arithmetic types to zero (and recursively applies this to aggregates).

The behavior of this code in C++ is described in section 8.5.1.7 of the C++ specification (online draft of C++ spec): the compiler aggregate-initializes the elements that don't have a specified value.

Also, note that in C++ (but not C), you can use an empty initializer list, causing the compiler to aggregate-initialize all of the elements of the array:

char array[100] = {};

As for what sort of code the compiler might generate when you do this, take a look at this question: Strange assembly from array 0-initialization

161
1/14/2018 11:21:25 PM

Implementation is up to compiler developers.

If your question is "what will happen with such declaration" - compiler will set first array element to the value you've provided (0) and all others will be set to zero because it is a default value for omitted array elements.


Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon