OriginalGriff
Проблема в том, что вы должны объявить переменные как правильный тип, чтобы использовать их:
char arr[3]
Выделяет достаточно места для 3-х человек
char
пункты - и в с
char
почти наверняка это ASCII, что означает, что он имеет ширину 8 бит, так что даже в 64-битной системе
arr
массив занимает всего три байта памяти.
Но это:
{"hi","how","are"}
это не три символа, это три строки, которые намного больше.
"hi" requires 3 bytes: 'h', 'i', and a null terminator.
"how" requires 4 bytes: 'h', 'o', 'w', and a null terminator.
"are" requires 4 bytes: 'a', 'r', 'e', and a null terminator.
Кроме того, вы не храните данные в
arr
сам,
arr
требуется три
pointer to char
значения для того, чтобы получить доступ к строкам, и каждый указатель нуждается в 8 байтах на 64-битной системе! Если бы это не работало так, вы не могли бы эффективно индексировать строки, так как "расстояние" между двумя строками не было бы одинаковым каждый раз.
Чтобы использовать инициализатор строки, вам необходимо объявить
arr
чтобы у него было достаточно места для их хранения, а это означает объявление его в виде массива
pointer to char
ценности:
char* arr[3] = {"hi","how","are"};