C언어 시리즈는 윤성우 열혈 C 프로그래밍 책을 기반으로 작성되었다. 바야흐로 작년 11월... 부트 캠프 시작하기 전, 두 번째 회사를 그만두고 개발을 시작하기로 맘 먹었다. 주변 컴공과 친구들의 C언어부터 접해보라는 조언을 듣고 C언어 책의 바이블과 같은
Chapter 02. 프로그램의 기본구성 02-1 "Hello World! 들여다보기" 이전 Chapter에서 Visual Studio를 설치하고 사용하는 방법에 대해 알아봤다. 거기에서 사용한 코드가 ... 이번에는 한문장씩 짚어가면서 의미하는 바가 뭔지 알아보려한다
Chapter 03. 변수와 연산자 03-1 "연산을 위한 연산자와 값의 저장을 위한 변수" 연산자란? 프로그래밍 언어를 이용해서 특정연산을 요구할 때 사용하는 약속된 기호를 가리킨다. 프로그램에서는 연산을 하고 그 결과를 메모리 공간에 저장한다. 그리고 메모리
Chapter 4. 데이터 표현방식의 이해 이번 Chapter에서는 진법에 대한 간단한 소개와 이를 기반으로 자료형에 대해, 컴퓨터의 정수와 실수 표현 방법에 대해 알아본다. 04-1 "컴퓨터의 데이터 표현방식" 컴퓨터는 2진수를 기반으로 데이터를 표현하고 연산도
Chapter 5. 상수와 기본 자료형 05-1 "C언어가 제공하는 기본 자료형의 이해" 자료형이란 데이터를 표현하는 기준이다. 때문에 변수도 상수도 자료형에 근거한다. 기존에 우리는 변수를 선언할 때 int num;이라 표현했다. 이 말은 즉, '정수를 저장할건
Chapter 6. printf 함수와 scanf 함수 정리하기 사실 앞에서 printf 함수와 scanf 함수에 대해서 개략적으로 얘기했기 때문에 이번 chapter는 reference(참고)로 봐주세요⭐ 06-1 "printf 함수 이야기" printf 함수는
Chapter 7. 반복실행을 명령하는 반복문 이번 Chapter에서는 C언어에서 제공하는 3개의 반복문을 배운다. (while문, do~while문, for문) 세 개가 유사하기 때문에 가장 단순한 구조인 while문을 시작으로 반복문의 기본 원리를 이해하는 것이
Chapter 8. 조건에 따른 흐름의 분기 이번 Chapter에서는 사용자의 선택에 따라 진행하는 일의 형태를 분기시켜보자. (조건문) 08-1 "조건적 실행과 흐름의 분기" 계산기 프로그램을 구현한다고 가정했을 때 우리는 사칙연산을 선택적으로 실행 가능하게 만
Chapter 9. C언어의 핵심! 함수! C언어의 핵심을 포인터로 생각하는 경우가 많다. 하지만 C언어의 핵심은 포인터가 아닌 '함수'다. 함수를 잘 정의하는 것도 중요하고, 잘 정의된 함수를 가져다 쓰는 것도 중요하다. 09-1 "함수를 정의하고 선언하기" 프
Chapter 10. 도전! 프로그래밍 1 반복문의 활용 능력과 함수의 정의 능력을 확인해보자. 도전 1 10진수 정수를 입력 받아서 16진수로 출력하는 프로그램을 작성해보자. 이는 서식문자의 활용에 대한 문제이므로 쉽게 해결할 수 있다. -풀이- 16진수 정수로 나타내는 것은 서식문자 %x를 활용하면 된다. 저기서 a를 대문자 A로 나타내고 싶으면...
Part 02. 포인터와 배열의 시작 Chapter 11. 1차원 배열 11-1 "배열의 이해와 배열의 선언 및 초기화 방법 배열이란? 다수의 데이터를 저장하고 처리하는 경우에 유용하게 사용할 수 있는 것이다. 1차원 배열의 선언에 필요한 것은 배열이름, 자료형, 길이정보이다. 배열은 일반적인 변수와 달리 여러 개의 값을 저장할 수 있다. 여러 개의...
Chapter 12. 포인터의 이해 12-1 "포인터란 무엇인가?" 포인터 변수란? 정수 형태의 주소 값을 저장하는 목적으로 선언되는 변수다. 변수는 메모리 상에서 아래 그림과 같이 저장된다. (나란히 할당되지 않을 수도 있다.) |👉| ---|---|--- 1바이트의 메모리 공간을 단위로 하나의 주소 값이 할당되며 주소 값도 1씩 증가한다. 참고로...
Chapter 13. 포인터와 배열! 함께 이해하기 이번 chapter에서는 "배열의 이름도 포인터다", '배열이름의 포인터 형'을 이해하는데 중점을 두었다. 13-1 "포인터와 배열의 관계" 배열의 이름은 포인터이고, 그 값을 바꿀 수 없는 '상수 형태의 포인터'이다. 다음 예제를 보자. 예제와 위 사진의 할당된 배열의 구조를 통해 "모든 배열요소...
Chapter 14. 포인터와 함수에 대한 이해 함수는 인자를 전달받도록 정의할 수 있다. (함수는 원래 인자 전달과 값의 반환이 가능) 배열 대상의 인자를 전달하는 원리를 알기 위해서는 인자 전달원리에 대한 확실한 이해가 필요하다. 14-1 "함수의 인자로 배열 전달하기" 인자전달의 기본방식 "함수호출 시 전달되는 인자의 값은 매개변수에 복사 된다...
Chapter 15. 도전! 프로그래밍 2 배열 응용 문제들을 풀어보는 시간이다. 도전 5의 경우 정렬의 기본원리를 설명하고 이에 관한 문제다. 정렬은 다음 Part에서 중요한 내용이므로 꼭 이해하고 넘어가는 것이 좋다. 포인터에 대한 직접적인 문제는 없지만 포인터에 대한 개념적인 이해가 바탕이 되야된다. 도전 1 길이가 10인 배열을 선언하고 총 1...
Part 03. 포인터와 배열의 완성 Chapter 16. 다차원 배열 이번 Chapter에서는 다차원 배열에 들어가면서 행과 열에 대해 많이 언급될 예정이다. 행 = 가로, 열 = 세로를 기억해주길 바라며...⭐ (나는 손가락으로 십자가를 그리면서 행!열!하고 외웠다 ㅋㅋ) 16-1 "다차원 배열의 이해와 활용" 다차원 배열이란? 2차원 이상의 배...
Chapter 17. 포인터의 포인터 17-1 "포인터의 포인터에 대한 이해" 포인터의 포인터는 포인터 변수를 가리키는 또 다른 포인터 변수를 뜻하는 것으로 흔희 이중 포인터 또는 더블 포인터라 부른다. * 연산자를 두개 이어서 이중 포인터를 선언할 수 있다. *이중 포인터 변수 (더블 포인터 변수) 이중 포인터 변수 (더블 포인터 변수)란? 포인터...
Chapter 18. 다차원 배열과 포인터의 관계 이전 chapter에 있는 포인터 배열과 포인터 배열의 포인터 형을 이해하고 이번 chapter를 시작하길 바라며... 18-1 "2차원 배열이름의 포인터 형" 여이서 arr은 int형 포인터이다. 따라서 함수의 인자로 전달되기 위해서는 함수의 매개변수가 int형 포인터로 선언되어야 한다. 그렇다면 2...
Chapter 19. 함수 포인터와 void 포인터 변수만 메모리 공간에 저장되는 것이 아니다. 함수도 바이너리 형태로 메모리 공간에 저장되어 호출 시 실행된다. 이렇게 메모리상에 저장된 함수의 주소 값을 저장하는 포인터 변수가 바로 함수 포인터 변수이다. 19-1 "함수 포인터와 void 포인터" **배열의 이름이 배열의 시작주소 값을 의미하듯, 함...
Chapter 20. 도전! 프로그래밍 3 도전 1 길이가 4 X 4인 int형 2차원 배열을 선언하고, 모든 요소를 1~16 순서대로 초기화하자. 그리고 배열의 요소들을 오른쪽 방향으로 90°씩 이동시켜서 그 결과를 출력하는 프로그램을 작성해보자. |👉| ---|---|--- 초기화||오른쪽 방향 90°회전 후 -풀이- 처음 배열을 적어보고 두 ...
Part 04. C언어의 깊은 이해 벌써 Part4이다!👏🏻👏🏻👏🏻👏🏻👏🏻 기본적인 것은 모두 배웠고 심화 과정이라 생각해도 좋다. 진지하게 배우기보단 즐기는 것을 추천한다~! Chapter 21. 문자와 문자열 관련 함수 이번 Chapter에서는 몇 개의 함수가 아니라 데이터의 이동경로를 의미하는 '스트림'과 이를 기반으로 하는 '...
Chapter 22. 구조체와 사용자 정의 자료형 1 22-1 "구조체란 무엇인가?" 구조체의 정의 구조체(structure)라는 것은 하나 이상의 변수(포인터 변수와 배열 포함)을 묶어서 새로운 자료형을 정의하는 도구다. 즉, 구조체를 기반으로 우리는 새로운 자
Chapter 23. 구조체와 사용자 정의 자료형 2 이번 Chapter에서는 구조체 기반의 프로그램 개발에 필요한 내용을 추가로 알아보고, 구조체 이외의 사용자 정의 자료형에 대해서도 알아볼 것이다. 23-1 "구조체의 정의와 typedef 선언" 구조체 변수를 선언할 때에는 무조건 struct 선언을 추가해야 한다. 이게 꽤나 귀찮은 일인데 구조체...
Chapter 24. 파일 입출력 계산기 프로그램과 같이 단순 질문(입력)에 답변(출력)만 하는 프로그램의 경우 데이터를 따로 저장하진 않는다. 다만, 우리가 일반적으로 접하는 거의 대부분의 프로그램에서는 다양한 형태와 종류의 데이터를 저장하고 잇다. 파일을 대상으로 데이터를 입력하고 또 출력할 수 있어야 프로그램다운 프로그램이다. 24-1 "파일과 스...
Chapter 25. 메모리 관리와 메모리의 동적 할당 이번 chapter에서는 C언어의 메모리 구조에 대해 알아보고자 한다. 25-1 "C언어의 메모리 구조" 프로그램을 실행하면 해당 프로그램의 실행을 위한 메모리 공간이 운영체제에 의해서 미리 마련이 된다. 그리고 바로 이 메모리 공간 내에서 변수가 선언되고, 문자열이 선언되는 것이다. 메모리의 ...
Chapter 26. 매크로와 선행처리기(Preprocessor) 이번 chapter에서는 C언어의 문법과 직접적인 연관은 없지만 실행파일의 생성과 관련해서 중요한 컴파일 과정의 일부로 포함되어 있는 '선행처리'에 대해 배울 예정이다. 26-1 "선행처리기와 매크로" Chapter1에서는 실행파일이 컴파일과 링크의 과정을 거쳐서 만들어지는 것이라고 했...
Chapter 27. 파일의 분할과 헤더파일의 디자인 27-1 "파일의 분할" 파일을 나눠서 각각의 파일에 용도 및 특성 별로 함수와 변수를 나눠서 저장하면 소스코드의 관리가 용이해진다. 다음 예제를 대상으로 파일을 나눠보도록 해보자. 이 파일을 총 세 개의 파일로 나눠서 저장한다고 가정해 보자. 위 그림과 같이 단순하게 파일 세 개로 나누면 잘 작...
Chapter 28. 도전! 프로그래밍 4 도전1 간단한 도서 관리용 프로그램을 작성해보자. [제목, 저자명, 페이지수]에 대한 정보를 저장할 수 있는 구조체를 정의하고, 구조체 배열을 선언해서 도서에 대한 정보를 저장하는 구조로 작성해 보자. main 함수에서는 사용자로부터 3권의 도서에 대한 정보를 입력 받고, 입력이 끝나면 도서에 대한 내용을 출력...