C언어

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

Study/C언어

처음하시는 분들을 위한 C언어 기초강의 시즌2 - 21 [다차원배열1 - 다차원배열의 기본(2차원, 3차원)]

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

Study/C언어

처음하시는 분들을 위한 C언어 기초강의 시즌2 - 20 [함수 포인터]

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

Study/C언어

처음하시는 분들을 위한 C언어 기초강의 시즌2 - 19 [문자열]

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

Study/C언어

처음하시는 분들을 위한 C언어 기초강의 시즌2 - 18 [배열과 포인터]

제 18강) 배열과 포인터 오늘은 배열을 배우고 포인터를 한 번 더 배웁니다. 포인터와 배열은 일심동체이기 때문이죠. 1) 변수의 집합, 배열 배열은 변수의 집합입니다. int num1, num2, num3; 이렇게 변수 3개를 따로따로 선언했던 것을 int arr[3]; 배열은 한 번에 선언을 가능케 합니다. 자료형 배열이름[배열의_크기]; 자료형 배열이름[배열의_크기] = { 초기값 }; 배열은 위와 같이 변수처럼 선언을 하지만 중괄호 사이에 배열의 크기를 지정하게 됩니다. int arr[3]; int arr[3] = { 1, 2, 3 }; 이렇게 사용이 가능케 됩니다. 이렇게 배열을 선언하게 되면 "배열의 크기"만큼 변수가 선언되지만 그 시작은 0부터 입니다. int arr[3]; // -> arr..

Study/C언어

처음하시는 분들을 위한 C언어 기초강의 시즌2 - 17 [포인터]

제 17강) 포인터(Pointer) 오늘은 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 정말 중요한 시간입니다. 바로 포인터에 대해서 배우는 시간이기 때문이죠. 1) 공포의 대상, 포인터 C언어에서 가장 공포스럽다고 느껴지는 대상인 포인터입니다. 포인터란? (출처 : 위키백과) 포인터는 다른 변수, 혹은 그 변수의 메모리 공간주소를 가리키는 변수를 말한다. 이때 포인터가 가리키는 값을 가져오는 것을 역참조(Dereferencing)라고 한다. 위의 설명은 "위키페디아"에 나온 설명입니다. 사실 정말 잘 설명되어있습니다. 하지만 이게 무슨 말인가 라고 하시는 분들이 많으시겠죠. 우리는 "4강 변수"에서 변수에 대해서 배울때 다음과 같이 배웠습니다. 변수는 "어떤 데이터를 저장하는 메모리 공간..

Study/C언어

처음하시는 분들을 위한 C언어 기초강의 시즌2 - 11 [진수(진법) 그리고 형변환]

제 11강) 진수(진법) 그리고 형변환 오늘은 진수(진법)과 형변환에 대해서 알아보도록 하겠습니다. 먼저 진수란 무엇일까요? 예전에 제가 썼던 글에 있던 그림인데요. 크게 진수는 대표적으로 "2진, 8진, 10진, 16진"이 있습니다. 말 그대로 2진법은 숫자 2개(0, 1)로 표현, 8진법은 숫자 8개(0 ~ 7)로 표현, 10진법은 숫자 10개(0 ~ 9)로 표현, 16진법은 숫자 10개(0 ~ 9)와 알파벳6개(A ~ F)로 표현합니다. 1) 진법 표현 숫자들은 각 진법에 따라 다르게 표현이 됩니다. 2) 진법 변환 각 진법끼리 변환하는 방법이 존재합니다. 이 부분은 수학이지만 다시한번 되뇌어 봅시다. ↑먼저 10진수를 2진수로 바꾸는 계산방법입니다. 그런데 저렇게만 쓰면 되는게 아니라 10001(..

Study/C언어

처음하시는 분들을 위한 C언어 기초강의 시즌2 - 07 [입력문과 출력문(printf, scanf, scanf_s)]

제 7강) 입력문과 출력문 우리는 6차례에 걸쳐서 printf문을 써왔습니다. #include int main(void) { printf("Hello World! \n"); return 0; } 위와 같이 써왔죠. 여기서 printf문은 "출력문"이라고 합니다. 그럼 출력문은 어떤것이 있을까요? #include int main(void) { int num; printf("Please Enter the Number : "); scanf("%d", &num); printf("Number is %d \n", num); return 0; } C언어에서 아주 일반적인 입력문으로는 "scanf"라는 것이 있습니다. 오늘 이 2가지를 집중적으로 배워보도록 하겠습니다. ※put, get 관련 함수들도 있긴하지만 이것들..

Study/C언어

처음하시는 분들을 위한 C언어 기초강의 시즌2 - 08 [변수에 대한 추가적인 이야기]

제 8강) 변수에 대한 추가적인 이야기 사실 이 이야기는 "초보자를 위한 C언어 강좌"라는 이름에 조금은 어울리지 않을 수도 있습니다만 기초를 탄탄히 해야 좋다고 생각하기 때문에 쓰려고합니다. CPU와 OS에 최적화된 변수(Integer) C언어은 "로우 레벨" 프로그래밍(어셈블리어 사용)이 가능합니다. 자바와는 다르게 직접 어셈블리어를 사용하여 프로그래밍이 가능하죠. 이 C언어에서 쓰이는 "int"라는 정수를 뜻하는 변수는 "CPU가 선호하는 자료형" 입니다. CPU에는 ALU라는 "산술 논리 장치"라는 것이 있습니다. 산술연산과 논리연산을 CPU에서 담당하고 있는 건데요. 이 ALU가 int 단위로 데이터를 처리하게 됩니다. 그래서 "CPU가 선호 하는 자료형"이라고 합니다. 이러한 이유로 char형..