Запутался в теме указателей и массивов в С++
Вот пример:
char* animal_1 = new char [10];
*animal_1 = "bear";
-как я понял так сделать нельзя, потому что *animal это указатель на массив из чаров, т.е на первый элемент массива чар, а "bear" - представляет собой адрес литерала т.е адрес на константу.
char animal_2[20] = "bear";
так сделать можно и теперь я запутался, почему возможна к примеру такая запись? По сути массив типа чар указывает на адрес первого элемента? почему мы можем присвоить сюда адрес литерала? Вероятно, мы присваиваем сюда что-то другое, но как это работает, я не понимаю
p.s скорее всего я написал полную чушь, поэтому буду рад, если вы поправите меня там где заблуждаюсь)
Ответы (1 шт):
Динамическая память
char *animal_1 = new char[10];
*animal_1 = "bear"; // Ошибка
Здесь *animal_1 — это первый символ массива. "bear" — это строка (указатель на массив символов). Присвоить указатель символу нельзя. Нужно использовать функцию strcpy для копирования строки в массив:
strcpy(animal_1, "bear");
Статическая память
char animal_2[20] = "bear";
При такой инициализации компилятор автоматически копирует строку "bear" в массив animal_2, добавляя '\0' в конце. Это работает, потому что массив сразу инициализируется строкой, а не поэлементно.