모두의 코드 커뮤니티

C++ 구조체 포인터 관련 질문

#include <iostream>
typedef struct Animal {
	char name[30];
	int age;
	int health;
	int food;
	int clean;
}animal;

void create(animal* create);
void show_condition(animal* condition);
void play(animal* action);

int main() {
	animal* list[30] = { 0 };
	int num = 0;

	while (1) {
		int menu;

		std::cout << "원하시는 기능의 버튼을 누르세요" << std::endl;
		std::cout << "1. 동물 생성하기" << std::endl; 
		std::cout << "2. 동물 놀아주기" << std::endl;
		std::cout << "3. 동물 상태보기" << std::endl;
		std::cout << "4. 프로그램 종료" << std::endl;
		std::cin >> menu;

		switch (menu) {
		case 1: 
			list[num] = new animal;
			create(list[num]); 

			num++;
			break;
		case 2:
			std::cout << "몇 번째 동물인가요 : ";
			std::cin >> num;
			play(list[num]);
			break;
		case 3:
			std::cout << "몇 번째 동물인가요 : ";
			std::cin >> num;
			show_condition(list[num]);
			break;
		case 4:
			return 0;
		}

	}
	return 0;
}
void create(animal* create) {
	std::cout << "동물을 등록합니다" << std::endl;
	std::cout << "동물의 이름 : ";
	std::cin >> create->name;
	std::cout << "동물의 나이 : ";
	std::cin >> create->age;
	create->clean = 100;
	create->health = 100;
	create->food = 100;
}

에서 main 함수에서 case 1(동물을 생성)에서 list[num] = new animal; 인데 new animal을 꼭 해주어야 하는건가요?? 이미 메인함수에서 animal* list[30] = { 0 }; 이렇게 선언 함으로써 30개의 공간에 animal형의 포인터가 할당이 되어있어서 new animal; 과정을 생략하고 num만 입력받아서 몇 번째 배열에 동물을 생성할지 함수로 전달했는데 오류가 생겨서 new animal을 넣으니 잘 되었습니다

제가 어디를 잘못 알고 있는건가요?/

좋아요 1

animal* list[30] = { 0 } 은 animal 객체를 생성한 것이 아니라 그냥 animal* 이 배열을 null 로 초기화 한 것입니다.

실제로 animal 객체를 사용하려면 new animal 을 통해 객체를 생성한 뒤에 animal* 에 해당 객체의 주소값을 적어놔야죠.

NULL로 초기화 한다는거 자체가 각각의 배열이 구조체를 담고 있어서 초기화를 하는거 아닌가요? 여기서
new animal 을 하는게 이해가 잘 되질 않습니다 C언어에서 동적할당과 같은 것 아닌가요? 메모리의 크기는 이미 저는 30으로 할당을 하였는데 동적할당의 개념인 new를 또 써야하는게 잘 모르겠습니다 제가 어디를 잘 모르고 있는건지 알 수 있을까요?..