데브코스/강의 정리

함수 포인터, 구조체, 열거형, 동적 메모리 할당

케케_ 2024. 10. 28. 13:10

함수 포인터

 - 함수명 아에 * 붙여주기

 - 함수 포인터도 포인터이므로 주솟값 저장

 

사용 이유

 - 동적 바인딩 : 런타임 시점에 메모리 크기와 위치 결정

 - vsCode의 extention : 플러그인 방식

 - 동적 바인딩 + 플러그인 방식 => 프로그램의 유연한 확장성

 

 

 

구조체

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

- 추상적이다 = 나만 아는 타입임

 

사용 이유

 - 연관된 변수들을 하나로 묶어 관리해 데이터 관리에 유용

 - 데이터 양(변수의 개수)이 많아지면 구조체가 유리

 

예)

struct student {
	char name[10];
    int age;
    int height;
};
  • struct : 구조체라는 데이터 타입을 의미
  • student : 내가 만든 구조체의 이름 = 내가 정의한 새로운 데이터 타입
  • name, age, height : 구조체 멤버

 - 구조체 변수 만들기 : student st1 ;

 - 구조체 멤버에 접근 : 구조체변수명.구조체멤버 (.(점)사용 - 직접 접근)

 

 

공용체

: 이것도 사용자 정의 자료형

: 구조체와의 차이는 메모리 공간을 공유한다는 점이다.

-키워드 : union

 

 

열거형

: enumeration의 약자로 enum(이넘)이라 읽음

: 데이터들을 열거한 집합

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

-키워드 : enum

 

 

동적 메모리 할당

메모리 영역 : 코드 영역, 스택 영역, 힙영역, 데이터 영역

 

코드영역 : 실행 명령어들 저장

 - 실행할 명령어들이 순서대로 쌓임, cpu가 이 영역에서 명령어들을 하나씩 가져다 처리

 

스택영역 : 지역 변수 및 매개변수 저장

 - 우리가 사용한 지역 변수, 매개변수 등 모두 스택 메모리를 사용함

 

힙영역 : 프로그래머가 직접 할당 = '큐'라고도 함    

 - 컴퓨터 메모리의 일부가 할당됐다가 회수되는 일들의 반복                 -> 동적 메모리!

 - 컴파일 시가 아닌 실행 시 사용자로부터 할당 메모리를 입력 받음

 

데이터 영역 : 전역변수, static 변수 저장 -> 프로그램 종료 시 소멸

 

사용 이유

 예) 학생수 -> 전학 등으로 자주 바뀜

 - 일반 변수로 선언한다면 ? -> 컴파일 타임 시 할당됨 => 학생 수 바뀔 때마다 프로그램을 재컴파일 해줘야함 (재배포)

 - 동적 메모리 사용! : 고정하지 않고 실행(=런타임) 시 결정

 - malloc 사용