Запутался в теме указателей и массивов в С++

Вот пример:

char* animal_1 = new char [10];
*animal_1 = "bear"; 

-как я понял так сделать нельзя, потому что *animal это указатель на массив из чаров, т.е на первый элемент массива чар, а "bear" - представляет собой адрес литерала т.е адрес на константу.

char animal_2[20] = "bear"; 

так сделать можно и теперь я запутался, почему возможна к примеру такая запись? По сути массив типа чар указывает на адрес первого элемента? почему мы можем присвоить сюда адрес литерала? Вероятно, мы присваиваем сюда что-то другое, но как это работает, я не понимаю

p.s скорее всего я написал полную чушь, поэтому буду рад, если вы поправите меня там где заблуждаюсь)


Ответы (1 шт):

Автор решения: qwardo

Динамическая память

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' в конце. Это работает, потому что массив сразу инициализируется строкой, а не поэлементно.

→ Ссылка