#cpp #структуры
Нашел в интернете такой пример использования структуры struct building //Создаем структуру! { char *owner; //здесь будет храниться имя владельца char *city; //название города int amountRooms; //количество комнат float price; //цена }; int main() { building apartment1; //это объект структуры с типом данных, именем структуры, building apartment1.owner = "Денис"; //заполняем данные о владельце и т.д. apartment1.city = "Симферополь"; apartment1.amountRooms = 5; apartment1.price = 150000; Для *owner и *city - что-то не вижу выделения памяти, значит ли это, что данные запишутся хз куда, и не удалятся по завершении программы?
Ответы
Ответ 1
Данные останутся на своем месте, т.е. никуда не переместятся и не перезапишутся. В ваших полях owner и city хранятся указатели на них (адреса первых символов). Так что вы не можете их удалять (не вздумайте написать delete[]city, например) - они не были выделены динамически, и не имеете права их перезаписывать (типа city[0]='A') - это строковые литералы.Ответ 2
Строковый литерал в С и С++ является немодифицируемым объектом типа "массив" со статическим классом памяти. То есть когда вы в своем коде пишете "Симферополь" вы фактически создаете безымянный символьный массив, который фактически является статической переменной. Она существует с самого начала жизни программы и до самого ее конца. Вся необходимая память уже выделена и освобождать ее - не ваша задача.Ответ 3
по хорошему имя владельца и название города в структуре должны быть константными struct building //Создаем структуру! { const char *owner; //здесь будет храниться имя владельца const char *city; //название города int amountRooms; //количество комнат float price; //цена }; тогда с main() все нормально, так как инициализация есть выделение памяти
Комментариев нет:
Отправить комментарий