The question asked contains a hidden assumption, that all char
arrays do end with a null character. This is in fact not always the case: this char
array does not end with \0
:
char no_zero[] = { 'f', 'o', 'o' };
The char
arrays that must end with the null character are those meant for use as strings, which indeed require termination.
In your example, the char
array only ends with a null character because you made it so. The single place where the compiler will insert the null character for you is when declaring a char array from a string literal, such as:
char name[] = "VIJAY";
// the above is sugar for:
char name[] = { 'V', 'I', 'J', 'A', 'Y', '\0' };
In that case, the null character is inserted automatically to make the resulting array a valid C string. No such requirement exists for arrays of other numeric types, nor can they be initialized from a string literal. In other words, appending a zero to a numeric array would serve no purpose whatsoever, because there is no code out there that uses the zero to look for the array end, since zero is a perfectly valid number.
Arrays of pointers are sometimes terminated with a NULL pointer, which makes sense because a NULL pointer cannot be confused with a valid pointer. The argv
array of strings, received by main()
, is an example of such an array.