Initializing Arrays : Arrays are initialized with a brace-enclosed list of constant expressions. A list of initializers for an incomplete array declaration completes the array’s type and completely defines the array size.
Therefore, when initializing an array of unknown size, the number of initializers in the initializer list determines the size of the array. For example, the following declaration initializes an array of three elements :
int x[ ] = { 1, 2, 3 };
If the array being initialized has a storage class of static , the initializers must be constant expressions.
Initializers for an array of a given size are assigned to array members on a oneto- one basis. If there are too few initializers for all members, the remaining members are initialized to 0. Listing too many initializers for a given size array is an error. For example :
int x[5] = { 0, 1, 2, 3, 4, 5 }; /* error */
String literals are often assigned to a char or wchar_t array. In this case, each character of the string represents one member of a one-dimensional array, and the array is terminated with the null character. When an array is initialized by a pointer to a string literal, the string literal cannot be modified through the pointer. When initializing an array with a string literal, use quotation marks around the initializing string. For example :
char string[26] = { “This is a string literal.” };
/* The braces above are optional here */
The terminating null character is appended to the end of the string if the size permits, as it does in this case. Another form for initializing an array with characters is the following :
char string[12] = {‘T’, ‘h’, ‘i’, ‘s’, ‘ ‘, ‘w’, ‘a’, ‘y’ };
The preceding example creates a one-dimensional array containing the string value “This way “. The characters in this array can be freely modified. Remaining uninitialized array members will be automatically initialized to zero.
If the size of the array used for a string literal is not explicitly stated, its size is determined by the number of characters in the string (including the terminating null character). If the size of the array is explicitly stated, initializing the array with a string literal longer than the array is an error.
Note : There is one special case where the null character is not automatically appended to the array. This case is when the array size is explicitly specified and the number of initializers completely fills the array size. For example :
char c[4] = “abcd”;
Here, the array c holds only the four specified characters, a , b , c , and d . No null character terminates the array.
Using the following rules, you can omit braces when initializing the members of a multidimensional arrays:
- When initializing arrays, you can omit the outermost pair of braces.
- If the initializer list includes all of the initializers for the object being initialized, you can omit the inner braces.
Consider the following example :
float x[4][2] = {
{ 1, 2 }
{ 3, 4 }
{ 5, 6 }
};
In this example, 1 and 2 initialize the first row of the array x , and the following two lines initialize the second and third rows, respectively. The initialization ends before the fourth row is initialized, so the members of the fourth row default to 0. Here is the result :
x[0][0] = 1;
x[0][1] = 2;
x[1][0] = 3;
x[1][1] = 4;
x[2][0] = 5;
x[2][1] = 6;
x[3][0] = 0;
x[3][1] = 0;
The following declaration achieves the same result :
float x[4][2] = { 1, 2, 3, 4, 5, 6 };
Here, the compiler fills the array row by row with the available initial values. The compiler places 1 and 2 in the first row (x[0] ), 3 and 4 in the second row (x[1] ), and 5 and 6 in the third row (x[2] ). The remaining members of the array are initialized to zero.