분류 전체보기

Study/C언어

처음하시는 분들을 위한 C언어 기초강의 시즌2 - 31 [다루지 않았던1(포인터를 이용한 함수 통신)]

제 31강) 포인터를 이용한 함수 통신 오늘은 "강의에서 다루지 않았던"의 첫번째 시간입니다. 포인터를 이용하여 함수간의 통신을 하는 법에 대해서 알아봅시다. 번지 연산자& 포인터를 이용하여 함수간 통신(Communication)을 하기 위해서는 "번지 연산자"를 사용합니다. 이 통신을 함으로써 다른 함수에서 값을 입력받아올 수 있고 이미 있는 변수의 값을 서로 바꾸어줄 수도 있습니다. 대표적인 포인터를 이용한 함수 통신으로는 스왑(Swap)이 있습니다. #include void swap(int* _num1, int* _num2) { int tmp = *_num1; *_num1 = *_num2; *_num2 = tmp; printf("Swap!!\n"); } int main() { int num1 = 5..

Study/C언어

처음하시는 분들을 위한 C언어 기초강의 시즌2 - 30 [전역변수와 정적변수(static)]

제 30강) 전역변수와 정적변수(static) 오늘은 전역변수와 static변수에 대해 알려드리려합니다. 지역변수 전역변수를 보기 전에 일반적인 변수(지역변수)를 먼저 봅시다. #include void func1(int num1) { int num2 = 2; printf("%d, %d \n", num1, num2); } void func2(int num1) { int num2 = 3; int num3 = 5; printf("%d, %d, %d \n", num1, num2, num3); } int main(void) { int num = 5; func1(num); func2(num); int num2 = 7; printf("%d \n", num2); return 0; } 위의 예제를 한 번 뜯어봅시다. 이..

Study/C언어

처음하시는 분들을 위한 C언어 기초강의 시즌2 - 29 [소스파일의 분할(헤더파일)]

제 29강) 소스파일의 분할(헤더파일) 오늘은 소스파일을 분할하여 편집하기 편하게, 보기 편하게 만드는 법을 알려드리려합니다. (즉, 헤더파일이라는 것을 알게됩니다.) 헤더파일 소스파일을 분할시키기 전에 헤더파일에 대해서 먼저 알아봅시다. 헤더파일은 특히 C와 C++에서 컴파일러에 의해 다른 소스파일에 자동으로 포함된 소스코드의 파일을 뜻합니다. 즉, 무언가가 선언되어 있는 파일을 뜻하고 이것을 우리가 사용하기 위해 #include를 합니다. 헤더파일에는 주로 형을 알리는 것들이 들어가있습니다. 1. #define 2. enum (다음 강의에서 배웁니다.) 3. struct 선언부 4. class 선언부 (C++에 해당됩니다.) 5. 함수형 이런 것들이 선언되어 있습니다. 소스파일 분할하기 먼저 간단한 ..

Study/C언어

처음하시는 분들을 위한 C언어 기초강의 시즌2 - 28 [전처리기(include, define, ifdef)]

제 28강) 전처리기(Pre-Processor) 오늘은 전처리기(Pre-Processor)에 관한 것을 배웁니다. 전처리기 전처리기는 컴파일이 시작되기 "전"에 작동되는 것으로, 지시자를 통하여 처리기를 작동시킵니다. (영어로는 PreCompiler, PreProcessor로 불립니다.) 전처리기 명령어(지시자)는 쉽게 육안으로 구분이 가능합니다. #include #define PI 3.141592 #ifdef __SET_ON__ ..... #endif #pragma once 이렇게 어떤 단어의 앞에 "#"이 붙으면 전처리기 명령어(지시자)가 됩니다. #include 아주 많이 써왔던 "#include" 입니다. #include 파일 예) #include #include #include "custom.h..

Study/C언어

처음하시는 분들을 위한 C언어 기초강의 시즌2 - 27 [C언어의 파일 입출력2]

제 27강) C언어의 파일 입출력2 파일 입출력의 두번째 시간입니다. 4) 무작위 접근(fseek, ftell) 먼저 fseek 함수부터 살펴보겠습니다. 원형: int fseek ( FILE * stream, long int offset, int origin ); // 스트림, 위치, 위치가 시작되는 fseek 함수는 해당 스트림의 위치 지정자를 지정된 위치로 옮기는 역할을 하는데요. 이 fseek 함수는 3가지의 인수를 필요로 합니다. 무작위로 접근할 스트림(stream)과 해당 스트림의 접근이 시작될 위치(origin), 그리고 그 위치(origin)로 부터 얼마나 떨어져 있는지에 대한 정도(offset)가 들어가게 됩니다. 반환 값은 성공적으로 접근했을 시 0, 그게 아닐 시에는 0이 아닌 값을 반..

Study/C언어

처음하시는 분들을 위한 C언어 기초강의 시즌2 - 26 [C언어의 파일 입출력1]

제 26강) C언어의 파일 입출력1 오늘은 아마 가장 긴 강좌가 될지도 모르는 "파일 입출력"에 대해서 알아보겠습니다. (입출력 = 입력 + 출력) C언어에서의 파일 입출력은 정말 중요합니다. C++언어에서도 성능 때문에 C언어의 파일 입출력을 종종 사용하지요. 1) 파일과의 통신(FILE) 파일과의 통신을 하기 위해서는 "어떻게 사용할 수 있느냐" 라는 의문을 가져야 합니다. 크게 우리는 2가지 측면에서 접근할 수 있습니다. ① 바이너리(Binary) 적인 접근 ② 텍스트(Text) 적인 접근 바이너리적으로 접근을 하게 되면 우리는 모든 바이트를 가지고 프로그램에서 사용할 수 있습니다. 이것은 어떤 시스템에서든지 동일하게 사용이 가능하죠. 텍스트적으로 접근을 하게 되면 텍스트단위를 가지고 프로그램에서 ..

Study/C언어

처음하시는 분들을 위한 C언어 기초강의 시즌2 - 25 [공용체와 열거형(union, enum)]

제 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..

Study/C언어

처음하시는 분들을 위한 C언어 기초강의 시즌2 - 24 [구조체와 형식 정의 지정자(struct, typedef)]

제 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; ..

Study/C언어

처음하시는 분들을 위한 C언어 기초강의 시즌2 - 23 [메모리 구조와 메모리 할당, 배열 동적할당(malloc, realloc, calloc, free)]

제 23강) 메모리 구조와 메모리 할당 오늘은 메모리 구조와 메모리 할당에 대해서 알아보는 시간입니다. 1) 메모리 구조 우리는 지금까지 변수를 써오면서 "메모리 공간에 할당"된다고 배웠습니다. 그럼 이 메모리는 어떠한 구조로 이루어져 있는가에 대해 고찰해봅시다. 메모리의 구조는 위의 그림과 같은 4가지 영역으로 나뉘어있습니다. 코드 영역(Code Area) 코드가 있는 영역으로 실행하는 프로그램의 코드에 관련된 명령들이 있는 영역입니다. 데이터 영역(Data Area) 프로그램이 생성되었을 때 생성되고, 종료되었을 때 사라지는 데이터가 저장됩니다. (전역 변수, 혹은 정적 변수, 배열, 구조체 등이 저장됩니다.) 힙 영역(Heap Area) 사용자에게 할당되는 영역으로 직접 관리하는 영역입니다. 동적으..

Study/C언어

처음하시는 분들을 위한 C언어 기초강의 시즌2 - 22 [다차원배열2 - 다차원배열과 포인터, 이중 포인터, 다중 포인터]

제 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]과 같습니다.) 여기까지..

Eskeptor
'분류 전체보기' 카테고리의 글 목록 (8 Page)