C 37

[내배캠자습]C언어 챕터 9-4 : enum

열거형(Enummeration)정수에 별명을 붙여서 소스코드를 이해하기 쉽게 해줍니다.enum 열거형명{ 멤버01, 멤버02, ...};Ex090401) enum 1 [중요 샘플 코드]아래 소스코드를 따라서 작성해봅시다. 따라서 작성한 소스코드의 출력을 예측해봅시다. 예측한 결과와 실행한 결과를 비교해봅시다.// Main.c#include enum EMonth{ MONTH_JAN = 1, MONTH_FEB = 2, MONTH_MAR = 3, MONTH_APR = 4};enum EASCII{ ASCII_A = 65, ASCII_B, ASCII_C, ASCII_D};int main(void){ printf("This month's(%d) lucky character is %c.", 3, 66); // 갑자..

C 2026.03.29

[내배캠자습]C언어 챕터 9-3 : 구조체와 클래스

Ex090301) Human 구조체아래 코드를 따라서 작성해봅시다. 따라 작성한 소스코드의 실행 결과를 예측해보고, 예측 결과와 실행 결과를 비교해봅시다.// Main.cpp#include struct Human{ float Height; float Weight; size_t Age;};typedef struct Human Human_t;int main(void){ Human_t* Park = (Human_t*)malloc(1 * sizeof(Human_t)); free(Park); Park = NULL; return 0;}객체지향 프로그래밍의 시작위 예제가 별거 아닌것처럼 보이지만, 객체지향 프로그래밍의 시작과도 같습니다. Park이라는 Human_t 객체를 만들어 낸 예제입니다. 객체지향 프로그래밍 ..

C 2026.03.29

[내배캠자습]C언어 챕터 9-2 : typedef

구조체도 기본 자료형처럼 쓰고 싶습니다.변수를 선언 할 때, struct 키워드를 빼고 자료형만 적고 싶은데 어떻게 해야할까요?typedeftype definition의 약자. 이미 정의되어 있는 자료형에 새로운 별명을 지어줍니다. ex) 선생님을 쌤, …Ex090201) typedef 1아래 소스코드를 따라서 작성해봅시다.// Main.cstruct Date{ int Year; int Month; int Day;};typedef struct Date Date_t;int main(void){ Date_t Birthday; return 0;}size_t 자료형도 사실 typedef unsigned long long size_t_t가 접미사로 붙으면 typedef 되었다고 보면 됩니다.Ex090204) 초기..

C 2026.03.29

[내배캠자습]C언어 챕터 9-1 : 구조체

지금까지 사용한 자료형은 모두 Built-In type.언어에 내장된 기본 자료형. ex) char, int, … 근데 나만의 자료형이 필요하다면 어떻게 해야 될까요?ex) 주민등록번호(int), 이름(char[])을 모아놓고 Human 자료형을 만들고 싶습니다. 그리고 Human Classmate[30];을 원합니다. 지금까지 배운 내용이라면, 굳이 주민등록번호용 int 변수 30개 이름용 문자배열 30개를 따로 선언해서 써야합니다.구조체(Structure)필요한 여러 자료형의 변수들을 한데 묶어서 하나의 자료형처럼 만들 수 있습니다.아래와 같은 코드로 정의 가능합니다. 예제 코드를 반복적으로 클론 코딩 해보며 숙지해봅시다.struct 구조체명 { 자료형 변수명; ...}; Ex090101) 구조체 정..

C 2026.03.29

[내배캠자습]C언어 챕터 8-2 : 동적할당과 메모리 소유권 문제

동적 할당의 세 가지 단계1️⃣메모리 할당(대여) 힙 메모리 관리자에게 필요한 바이트만큼의 메모리를 달라고 요청합니다. 힙 메모리 관리자는 해당 크기의 연속된 메모리를 찾아서 반환합니다. 반환된 값은 시작 메모리 주소입니다.2️⃣메모리 사용 할당된 힙 메모리 시작 주소를 가지고 원하는 작업 수행합니다. 이때 할당된 메모리 속 데이터는 쓰레기값입니다.3️⃣메모리 해제(반납) 힙 메모리 관리자에게 해당 메모리 주소를 돌려주면서 다 썼다고 알립니다. 힙 메모리 관리자는 해당 메모리를 점유되지 않은 메모리 상태로 바꿉니다. 메모리 주소를 돌려주지 않으면 메모리 누수(Memory leak) 발생합니다. 메모리 누수란, 해당 메모리가 점유 상태를 벗어나지 못해 사용가능한 메모리가 줄어드는 현상입니다.동적 메모리 관..

C 2026.03.29

[내배캠자습]C언어 챕터 8-1 : 힙 메모리

메모리 레이아웃(메모리 구조)메모리 레이아웃은 크게 스택 메모리, 힙 메모리, 코드 섹션, 데이터 섹션으로 나뉩니다. 이번 단원에서 살펴볼 메모리는 힙 메모리입니다.코드 섹션과 데이터 섹션코드 섹션: 우리가 작성한 소스코드들이 빌드된 결과물들이 저장되는 곳입니다. 데이터 섹션: 전역 변수와 정적 변수등이 저장되는 곳입니다. 근데, 스택 메모리와 힙 메모리는 왜 나눴을까요? 스택 메모리의 단점1️⃣스택 메모리에 저장되는 지역 변수(배열 등)의 크기는 컴파일 타임에 고정됩니다. 런타임에 더 필요해진다 해도 크기를 늘릴 수 없습니다.2️⃣함수가 종료되면 해당 스택 프레임에 더이상 접근 불가능합니다. 즉, 지역변수의 수명은 함수의 수명과 함께합니다. 더 오래 보존하려면 전역변수 혹은 정적변수로 선언해야 합니다...

C 2026.03.29

[내배캠자습]C언어 챕터 7-3 : NULL과 void 포인터

포인터를 초기화 하려면 어떻게 하면 될까요?변수를 초기화 할 때는 대부분 0으로 초기화를 했습니다. 포인터도 변수이긴 한데, 0처럼 깔끔하게 초기화하는 그런 값이 없을까요?NULL 포인터#define NULL ((void*)0) 아무것도 가르키지 않는 포인터.Ex070301) NULL을 활용한 포인터 유효성 검사아래 소스코드를 따라서 작성해봅시다. 따라 적은 코드의 출력 결과를 예측해보고, 예측 결과와 실행 결과를 비교해봅시다.// Main.c#include int main(void){ int* Ptr = NULL; if (NULL == Ptr) { printf("NULL == Ptr"); } if (Ptr != NULL) { printf("Ptr is not the \\"NULL pointer\\"..

C 2026.03.29

[내배캠자습]C언어 챕터 7-2 : 주소 연산자와 역참조 연산자

지난 시간에 메모리 주소를 저장하는 방법에 대해 배웠습니다.그럼 메모리 주소는 어떻게 얻을까요?주소 연산자(address-of operator) &피연산자의 메모리 주소를 반환하는 연산자. 기호 &(Ampersand)를 사용합니다.사실 scanf() 함수에서 사용 했었던 주소 연산자“~에”라고 해석하자고 배웠었습니다. 사실은 변수 앞에 &를 붙혀서 그 변수의 메모리 주소를 얻은 것입니다. 해당 메모리 주소에 입력 받은 값을 저장할 수 있게된 것입니다. 메모리 주소를 얻을 수 있는 두 가지 방법1️⃣주소 연산자2️⃣배열의 이름int Array[1024]; // 여기서 Array는 메모리 주소를 저장한 변수. 특히 그 메모리 주소는 배열의 시작 메모리 주소. 메모리 주소는 어떻게 얻는지 배웠습니다.해당 메모..

C 2026.03.29

[내배캠자습]C언어 챕터 7-1 : 포인터

포인터의 필요성이전에 배열을 배우면서 5천만개 크기의 배열을 생각해봤습니다. int 자료형의 크기는 4byte이므로, 5천만개 배열의 크기는 2억바이트입니다. 이걸 어딜가나 들고다니기엔 무리입니다. 배열은 연속적인 메모리에 저장된다고 했으니까 자료형과 시작 주소만 알면 될 것 같습니다. 시작 메모리 주소로 가서 자료형을 통해 얻은 한 칸의 크기로 모두 접근 가능하기 때문입니다.“들고 다닌다”의 의미main() 함수에서 대선투표결과가 저장된 배열이 있다고 해봅시다. Count() 함수에서 개표해보고자 합니다. 즉, Count() 함수로 대선투표결과가 저장된 배열을 전달해야 합니다. 그럼 Count() 함수의 스택 프레임은 2억바이트를 할당해줘야 할까요? 들고다니기엔 무리입니다.ex) 아파트 1채 10톤(2..

C 2026.03.29

[내배캠자습]C언어 챕터 6-5 : 변수의 종류

변수의 종류변수에는 지역 변수/전역 변수가 있습니다. 여기에 static이나 const, extern 같은 키워드가 붙어서 조금씩 뉘앙스가 달라집니다.지역 변수(Local Variable)블럭 스코프 내에 선언된 변수. 따라서 스택 메모리에 저장됩니다. 함수가 종료되면 스택 프레임이 반환되면서 더이상 접근 불가능합니다.지역 변수와 함수 마을함수를 하나의 마을이라고 생각해봅시다. main() 마을에서는 Add() 마을에서 선언된 지역 변수 A를 접근할 수 없습니다. 그리고 Add() 함수가 종료되면, 지역 변수 A도 사라진다고 이해합시다.Ex060501) 지역변수다음의 소스코드를 명령어 순서 파악으로 출력 결과를 예측해봅시다. 예측 결과와 실행 결과와 비교해봅시다.// Main.c#include int a..

C 2026.03.29