Но если я использую "" для массива char или '' для массива const char *, это не так
работа
В первом примере вы создаете массив из 4 chars
- char arr[4];
Это означает, что каждый элемент arr
является char
. 'H'
- это char
, 'e'
- это char
и т. Д. Поэтому, когда вы присваиваете char
элементу массива, который является char
, он работает.
Во втором примере вы создаете массив из 4 указателей на const char
- const char* arr[4];
Это означает, что каждый элемент вашего массива является указателем и указывает на char
, который вы обещаете не изменять. "H"
является строковым литералом, который представляет собой массив из 2 - char
'H'
и завершающий ноль '\0'
. Этот массив превращается в указатель на его первый элемент, который равен 'H'
- const char
(то же самое для остальных букв). Ваш массив представляет собой массив указателей на const char
, вы назначаете указатель на const char
, поэтому он работает.
Если вы поменяете ''
на ""
, это не будет работать, поскольку типы элементов массива не будут совпадать с данными, которые вы будете назначать.