[TIL] 240502 - 구조체, 동적 메모리 할당

jini·2024년 5월 2일

TIL

목록 보기
4/48

구조체


하나 이상의 서로 다른 종류의 연관된 변수들을 묶어서 새로운 데이터 타입을 정의하는 것

// 구조체 선언
struct 구조체 이름{
	자료형 변수명;
    자료형 변수명;
};

// 구조체 멤버 변수 접근
구조체 변수명.구조체 멤버

사용 예시

struct Student{
	char name[10];  // 구조체 멤버 name
	int age;        // 구조체 멤버 age
	int height;     // 구조체 멤버 height
} s1, s2;  // 구조체 변수 s1, s2 선언

struct Student s3;  // 구조체 변수 s3 선언

s1.name = "kim";  // s1의 구조체 멤버 name에 "kim" 대입



공용체


가장 큰 변수 크기만큼 메모리 공간이 할당되고, 나머지 변수들은 앞에서부터 메모리를 공유

union unTemp
{
	char a;
    int b;
    double c;
}un;



열거형


열거형은 데이터들을 열거한 집합 enumeration의 약자(enum)

컴파일러는 열거형 멤버들을 정수형 상수로 취급

enum Week
{
	sun = 0
	mon
	tue
	wed
	thu
	fri
	sat
};

int main()
{
	int day;
	scanf("요일을 선택하세요 : %d", &day);
	
	switch(day){
		case sun:
			printf("일요일");
			break;
		case mon:
			printf("월요일");
			break;
		case tue:
			printf("화요일");
			break;
		case wed:
			printf("수요일");
			break;
		case thu:
			printf("목요일");
			break;
		case fri:
			printf("금요일");
			break;
		case sat:
			printf("토요일");
			break;
		default:
			printf("잘못 입력하셨습니다.\n");
			break;
	}
}

열거형의 멤버들은 각 요일을 나타내며, 첫번째 멤버 sun을 0으로 설정하면 다음 멤버 mon은 1씩 증가



동적 메모리 할당


정적 할당 : 프로그램이 시작되기 전, 컴파일 시점에 코드를 읽고 메모리 공간을 확보하는 것
동적 할당 : 컴파일 시점이 아닌 프로그램이 실행되는 중인 런타임에 필요한 만큼의 메모리 공간을 확보하는 것

void* malloc(size_t size);

전달인자 size는 바이트 단위로 입력

  • 메모리가 할당되면 메모리의 주소값을 리턴
  • 메모리 부족 시 NULL 포인터를 리턴

void*

타입이 지정되지 않는 포인터(원하는 메모리 크기만큼 할당)

#include <stdio.h>

int main()
{
	int num;
	int *student;
	
	printf("학생수를 입력하세요 : ");
	scanf("%d", &num);
	
	student = (int*)malloc(sizeof(int) * num)
	
	if(student == NULL){
		printf("메모리가 할당되지 않았습니다.\n");
		return 0;
	}
	
	printf("할당된 메모리 크기 : %d\n", sizeof(int)*num);
	free(student); 
	return 0;
}



객체 지향 프로그래밍


구조적 프로그래밍

  • 순차적, 하향식, 폭포수 방식
  • 기능적인 기본 단위 : 함수

객체 지향 프로그래밍

  • 기능적인 기본 단위 : 객체

추상화

복잡한 내부 구현은 감추고, 실제로 노출되는 인터페이스를 단순화하는 것

캡슐화

데이터와 메서드를 하나의 단위로 묶는 것으로, 클래스의 내부 정의에 대해 외부에서 볼 수 없도록 함
-> 외부로부터 데이터를 조작할 인터페이스가 필요

0개의 댓글