Массив инициализируется элементами строкового литерала
char test[]="test";
Таким образом, массив имеет столько же элементов, сколько строковый литерал, поскольку размер массива не указан явно.
Строковый литерал в памяти представлен как символьный массив
char literal[] = { 't', 'e', 's', 't', '\0' };
То есть он имеет 5 символов, включая завершающий нулевой символ. Все эти символы используются для инициализации массива.
Таким образом, размер массива равен 5 * sizeof( char )
. sizeof( char )
всегда равно 1
. Таким образом, размер массива равен 5
.
Вы можете проверить это, вызвав стандартную функцию C printf
printf( "sizeof( test ) = %zu\n", sizeof( test ) );
Вот демонстрационная программа.
#include <stdio.h>
int main(void)
{
char test1[] = "test";
printf( "sizeof( test1 ) = %zu\n", sizeof( test1 ) );
char test2[] = { 't', 'e', 's', 't', '\0' };
printf( "sizeof( test2 ) = %zu\n", sizeof( test2 ) );
return 0;
}
Его выход
sizeof( test1 ) = 5
sizeof( test2 ) = 5