This is initialization because all values in the array are set to zero or hello at time of declaration:
int array[3] = {0};
char array[3][6] = {"hello"};
This initializes to different values at time of declaration:
int array1[3] = {1, 2, 3};
char array[3][6] = {"joe", "deer", "car"};
When declaring arrays of user defined type the default constructor is used. Therefore if the default constructor initializes elements to a default value, then the default values will be in the elements of the array. If the default constructor doesn't initialize default values then accessing member values of array elements will return junk.
Once an object has been declared any subsequent changes to its value is called assignment. However, the first time you assign a value to an object, it is frequently called initializing since it is the initial value.
int i; //the value of i is junk
i = 99; //assign value to i. Since it is the first value assigned to i, the is also frequently called initializing i.
When accessing elements of an array you need to use an index. Say you have have declared an array as below:
int arrray2[3];
char names[3][6];
Now to assign values (initialize, if you will) the elements of the array you need to use indexes.
array2[0] = 3;
array2[1] = 55;
array2[2] = -33;
strcpy(names[0], "Tom"};
strcpy(names[1], "Dick"};
strrcpy(names[2], "Joe"};
Note, since this isn't true initialization at time of declaration, the strcpy() function must be used to assign values to (C style) strings; the assignment operator will not work. The same goes for member values.
struct person
{
char name[80];
int age;
};
person family[2];
strcpy(family[0].name, "Sally"};
family[0].age, 21;
strcpy(family[1].name, "Hal");
family.age = 22;