제 25강) 공용체와 열거형 오늘은 공용체(union)와 열거형(enum)에 대해서 알아보도록 합니다. 1) 공용체(union) 공용체의 사용법 자체는 구조체(struct)와 비슷합니다만 한 가지 다른 점이 있습니다. // 사용법 union 공용체_이름 { 자료형 변수이름; 자료형 변수이름; ... }; // 예) union Person { char* name; int age; char sex; }; 구조체 처럼 선언을 하고 사용하게 됩니다만 위에서 언급한대로 한 가지 다른 점이 있습니다. 바로 공용체는 내부의 자료들이 메모리를 공유한다는 것이지요. #include struct STRUCT1 { double d_num; int i_num; char ch; } union UNION1 { double d_n..
제 24강) 구조체와 형식 정의 지정자 오늘은 C언어에서 포인터만큼 많이 쓰이는 구조체와 형식 정의 지정자에 대해서 알아봅니다. 1) 형식 정의 지정자(typedef) 형식 정의 지정자는 말 그대로 "형식을 정의하는 지정자(별칭자)" 입니다. 자료형의 별명을 지어줄 수 있다. 라고도 설명할 수 있습니다. // 사용법 typedef 자료형 별명; // 예) typedef int INT; typedef char* STRING; typedef int* Int_Ptr; 사용법은 위와 같습니다. 자료형의 이름을 별명으로 부르게 됩니다. 간단한 예제를 통하여 익혀봅시다. #include #include typedef int* Int_Arr; // int* == Int_Arr typedef char* String; ..
제 23강) 메모리 구조와 메모리 할당 오늘은 메모리 구조와 메모리 할당에 대해서 알아보는 시간입니다. 1) 메모리 구조 우리는 지금까지 변수를 써오면서 "메모리 공간에 할당"된다고 배웠습니다. 그럼 이 메모리는 어떠한 구조로 이루어져 있는가에 대해 고찰해봅시다. 메모리의 구조는 위의 그림과 같은 4가지 영역으로 나뉘어있습니다. 코드 영역(Code Area) 코드가 있는 영역으로 실행하는 프로그램의 코드에 관련된 명령들이 있는 영역입니다. 데이터 영역(Data Area) 프로그램이 생성되었을 때 생성되고, 종료되었을 때 사라지는 데이터가 저장됩니다. (전역 변수, 혹은 정적 변수, 배열, 구조체 등이 저장됩니다.) 힙 영역(Heap Area) 사용자에게 할당되는 영역으로 직접 관리하는 영역입니다. 동적으..
제 22강) 다차원배열2 - 다차원배열과 포인터 오늘은 다차원배열의 두번째 시간으로 다차원배열과 포인터의 관계에 대해서 알아봅니다. 다시 한번 되짚어 보자면 다차원배열은 2차원 이상의 배열을 다차원이라고 합니다. 1) 다차원 배열 다음과 같은 2차원배열이 있다고 합시다. int arr[2][2]; 여기서 "arr"는 2차원배열로 선언된 배열의 이름이자 배열의 첫번째 원소의 주소(번지)를 나타냅니다. (1차원배열에서와 같습니다.) #include int main() { int arr[2][2]; printf("arr = %u\n", arr); printf("arr[0] = %u\n", arr[0]); return 0; } 그래서 번지수가 똑같습니다. (그러므로 arr은 &arr[0]과 같습니다.) 여기까지..
제 21강) 다차원배열1 - 다차원배열의 기본 오늘은 다차원배열의 첫 시간으로 다차원배열의 기본에 대해서 알아봅니다. 다차원배열은 2차원 이상의 배열을 다차원이라고 합니다. 1) 다차원 배열이란 일반적인 배열은 이렇게 1차원적인 배열을 뜻합니다. (가로로만, 혹은 세로로만, x로만) 여기서 더 나아가서 다차원배열은 1차원을 넘어서는 배열을 뜻합니다. (가로와 세로, x와 y) 위의 배열은 대표적인 2차원배열입니다. 세로로3, 가로로7인 배열이죠. 2) 2차원배열 가장 많이 쓰이는 배열은 1차원배열입니다. 그리고 그 다음으로 쓰이는 배열은 2차원배열입니다. 즉, int arr[3][2]로 선언된 2차원배열은 [0][0], [0][1], [1][0], [1][1], [2][0], [2][1] 총 3x2 2차..
제 20강) 함수 포인터 오늘은 함수 포인터에 대해서 알아봅니다. 상당히 어렵다면 어려울 수 있는 부분이라 여러번 읽어보셔야 할겁니다. 1) 함수 포인터란 포인터는 포인터인데 함수를 가리키는 포인터를 뜻합니다. int num = 5; int* ptr = # int arr[] = { 1, 2, 3 }; int* ptrArr = arr; 변수나 배열을 포인터로 연결할때는 위와 같이 사용했습니다. 자료형 (*포인터_함수명)(함수의_인자...) = 연결할_함수; // 예1) int addFunc(int num1, int num2) { return num1 + num2; } // 위의 addFunc함수에 연결하는 포인터 int (*addFuncPointer)(int, int) = addFunc; // 예2) vo..
제 19강) 문자열 17강과 18강에서 우리는 포인터와 배열을 배웠습니다. 이제 우리는 문자열을 배울 차례입니다. 1) 문자열 문자열은 "문자(기호)를 모아놓은 것"을 뜻합니다. C언어에서 문자열을 표현하는 방법은 2가지가 존재합니다. char str[] = "Back In Time"; // char 배열을 이용한 문자열 표현 char* str = "Back In Time"; // char 포인터를 이용한 문자열 표현 2) char 배열을 사용한 문자열 일반적으로 문자열을 저장할 때 char 배열을 이용하여 문자열을 저장합니다. #include int main() { char str[30] = {0,}; // 문자열의 최대 길이는 30 printf("문자열 입력: "); scanf("%[^\n]s", s..
제 18강) 배열과 포인터 오늘은 배열을 배우고 포인터를 한 번 더 배웁니다. 포인터와 배열은 일심동체이기 때문이죠. 1) 변수의 집합, 배열 배열은 변수의 집합입니다. int num1, num2, num3; 이렇게 변수 3개를 따로따로 선언했던 것을 int arr[3]; 배열은 한 번에 선언을 가능케 합니다. 자료형 배열이름[배열의_크기]; 자료형 배열이름[배열의_크기] = { 초기값 }; 배열은 위와 같이 변수처럼 선언을 하지만 중괄호 사이에 배열의 크기를 지정하게 됩니다. int arr[3]; int arr[3] = { 1, 2, 3 }; 이렇게 사용이 가능케 됩니다. 이렇게 배열을 선언하게 되면 "배열의 크기"만큼 변수가 선언되지만 그 시작은 0부터 입니다. int arr[3]; // -> arr..
제 17강) 포인터(Pointer) 오늘은 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 중요한 시간입니다. 바로 포인터에 대해서 배우는 시간이기 때문이죠. 1) 공포의 대상, 포인터 C언어에서 가장 공포스럽다고 느껴지는 대상인 포인터입니다. 포인터란? (출처 : 위키백과) 포인터는 다른 변수, 혹은 그 변수의 메모리 공간주소를 가리키는 변수를 말한다. 이때 포인터가 가리키는 값을 가져오는 것을 역참조(Dereferencing)라고 한다. 위의 설명은 "위키페디아"에 나온 설명입니다. 사실 정말 잘 설명되어있습니다. 하지만 이게 무슨 말인가 라고 하시는 분들이 많으시겠죠. 우리는 "4강 변수"에서 변수에 대해서 배울때 다음과 같이 배웠습니다. 변수는 "어떤 데이터를 저장하는 메모리 공간..
제 16강) 함수 오늘은 정말 정말 중요한 시간입니다. 바로 함수에 대해서 배우는 시간이기 때문이죠. 함수란? (출처 : C Primer Plus) 함수(Function)는 어떤 특정 업무를 처리하도록 설계된 프로그램 코드를 자체 내에 포함하고 있는 하나의 프로그램 단위이다. 함수란? (출처 : 위키백과) 함수(Function)는 대부분의 프로그래밍 언어에서 지원하는 기능으로, 하나의 큰 프로그램을 여러 부분으로 나누어준다. 즉, C언어에서는 프로그램 단위라고 생각하시면 됩니다. 1) 메인 함수(int main) 이제 드디어 메인 함수를 설명하는 날이 왔습니다. int main(void) { printf("Hello World! \n"); return 0; } 우리가 즐겨쓰던 main함수 입니다. 자료형..