본문 바로가기

C

(11)
[C] C로 구현하는 선형적인 자료구조 : 싱글 연결 리스트 (1) 🔊 해당 포스팅은인프런의 널널한 개발자님의 독하게 C를 배운 사람을 위한 선형 자료구조 강의를 듣고 개인적인 복습 목적 하에 작성된 글입니다. 해당 포스팅에 사용된 모든 자료는 필자가 직접 재구성하였음을 알립니다. 이번 포스팅에서는 가장 기본적인 선형 자료구조 중 하나인 연결 리스트(Linked List) 자료구조를 C 언어로 구현해 보도록 하자. 이번 포스팅에서 구현할 것은 성능 개선과 같은 것들을 고려하지 않고 정말 구현에 초점을 맞추어 본다. 1. 연결 리스트 자료구조구현에 앞서서 연결 리스트가 어떤 자료구조인지 알아보아야 한다. 흔히 연결 리스트라는 자료구조를 구글링 해보면 아래와 같은 그림이 등장한다.  위 그림 속 하나의 data 와 next 가 같이 들어있는 것을 하나의 '노드(Node)'..
[C] 함수 포인터와 역호출(Callback) 구조 🔊 해당 포스팅은 인프런의 널널한 개발자님의 독하게 시작하는 C 프로그래밍 강의를 듣고 개인적인 복습 목적 하에 작성된 글입니다. 해당 포스팅에 사용된 모든 자료는 필자가 직접 재구성하였음을 알립니다. 이번 포스팅에서는 함수의 고급이론 중 하나로 함수 포인터에 대한 개념에 대해 배워보고 이 함수 포인터를 자주 사용하는 유즈 케이스 중 하나로 역호출(Callback) 구조에 대해서도 배워보자.1. 함수 포인터이제 포인터라는 것에 대해서는 매우 익숙할 것이다. 그동안 정수, 실수, 문자, 문자열, 배열에 대한 포인터도 배웠지만 함수에 대한 포인터에 대해서도 배워볼 차례다. 함수도 문자열, 배열과 마찬가지로 정의한 함수 이름에 메모리 주소가 담긴다. 그래서 함수 포인터를 정의하면 함수의 이름을 메모리 주소로..
[C] 컴파일 전처리기 🔊 해당 포스팅은 인프런의 널널한 개발자님의 독하게 시작하는 C 프로그래밍 강의를 듣고 개인적인 복습 목적 하에 작성된 글입니다. 해당 포스팅에 사용된 모든 자료는 필자가 직접 재구성하였음을 알립니다.  이번 포스팅에서는 # 이라는 문자를 사용해서 정의하는 전처리기에 대해서 알아보자. 전처리기에 대한 처음 소개는 이전에 한 적이 있었다. 그 때 당시에는 간단하게만 짚고 넘어갔는데 이번엔 좀 더 의미를 자세히 알아보자. 컴파일 전처리기는 이름 자체에서도 알 수 있듯이, 컴파일 타임이 시작하기 이전(before)에 어떠한 처리를 해주는 것을 의미한다. 대표적인 전처리기로는 stdio.h 와 같은 헤더 파일을 포함하도록 하는 것, 조건부 컴파일, 심볼릭 상수를 정의, 매크로 정의 이렇게 총 4가지가 있다.1..
[C] 변수와 상수 고급 이론 🔊 해당 포스팅은 인프런의 널널한 개발자님의 독하게 시작하는 C 프로그래밍 강의를 듣고 개인적인 복습 목적 하에 작성된 글입니다. 해당 포스팅에 사용된 모든 자료는 필자가 직접 재구성하였음을 알립니다. 저번 포스팅까지 강의에서 소개하는 C언어의 기초적인 내용은 모두 끝이 났다. 이제 앞으로 해당 포스팅을 포함해 3개의 포스팅에서는 C언어에서 고급 이론에 해당하는 내용들을 배워보려고 한다. 그 첫번째 내용으로는 변수와 상수에서의 고급 이론에 대한 내용이다.1. 컴파일러 최적화에 기여하는 요소 : 형한정어(Type Qualifier)컴파일러 최적화란 무엇일까? C언어를 배우는 첫 포스팅에서 우리는 C언어가 총 3가지 시점을 갖는다고 했다. 잠시 그 때의 자료를 가져와보자.  컴파일러는 위 단계 중 컴파일 ..
[C] 파일 입/출력 🔊 해당 포스팅은 인프런의 널널한 개발자님의 독하게 시작하는 C 프로그래밍 강의를 듣고 개인적인 복습 목적 하에 작성된 글입니다. 해당 포스팅에 사용된 모든 자료는 필자가 직접 재구성하였음을 알립니다. 이번 포스팅에서는 C언어에서의 파일 입/출력에 대해 배워보도록 하자. C언어 포스팅 시리즈에서 초반에 문자열 입/출력을 다룬 적이 있었다. 하지만 그 이후로 학습을 진행하면서는 모두 주기억장치인 RAM, 엄밀히 말하면 각 프로세스 당 부여되는 가상 메모리를 다루는 것이었다. 이제는 주기억장치와는 다르게 컴퓨터 전원을 꺼도 휘발되지 않는 보조기억장치인 SSD, HDD에서 데이터를 읽고 쓰는 파일 입/출력에 대해서 배워보도록 하자.  참고로 RAM을 이용할 때의 데이터는 우리가 메모리를 동적할당할 때나 소스..
[C] 서로 다른 유형의 자료형을 모을 수 있는 구조체와 공용체 🔊 해당 포스팅은 인프런의 널널한 개발자님의 독하게 시작하는 C 프로그래밍 강의를 듣고 개인적인 복습 목적 하에 작성된 글입니다. 해당 포스팅에 사용된 모든 자료는 필자가 직접 재구성하였음을 알립니다. 이번 포스팅에서는 구조체와 공용체에 대해서 알아보고 사용하는 방법에 대해 알아보자.1. 구조체를 만들어보자!우선 구조체랑 비교한다고 하면 이전에 배웠던 배열이 비교군이 될 수 있겠다. 구조체와 배열의 공통점이라고 한다면 여러 자료형을 모아 새로운 하나의 형식으로 기술할 수 있다는 것이다. 하지만 배열은 그 여러 자료형들이 반드시 같은 유형(ex. 정수, 실수, 문자)이어야 하는 반면 구조체는 서로 다른 유형의 자료형들이 모이는 것이 가능하다. 물론 구조체에서 배열처럼 같은 유형의 자료형이여도 상관은 없다..
[C] 함수 응용 🔊 해당 포스팅은 인프런의 널널한 개발자님의 독하게 시작하는 C 프로그래밍 강의를 듣고 개인적인 복습 목적 하에 작성된 글입니다. 해당 포스팅에 사용된 모든 자료는 필자가 직접 재구성하였음을 알립니다. 이번 포스팅에서는 이전에 배웠던 C언어에서 함수를 정의하는 방법에서 더 나아가 좀 더 응용하는 내용에 대해서 알아보도록 하자.1. 함수에 매개변수를 전달하는 2가지 기법함수에 매개변수를 전달하는 방법으로는 크게 2가지가 존재한다. 첫 번째로는 우리가 흔히 사용해왔던 call by value 방식이다. 예시코드는 아래와 같다. #include int Multiply(int a, int b) { return a * b;}int main(void) { int res = 0; res = Mult..
[C] 메모리와 포인터 🔊 해당 포스팅은 인프런의 널널한 개발자님의 독하게 시작하는 C 프로그래밍 강의를 듣고 개인적인 복습 목적 하에 작성된 글입니다. 해당 포스팅에 사용된 모든 자료는 필자가 직접 재구성하였음을 알립니다. 이번 포스팅에서는 드디어 C언어 학습의 고비(?)인 메모리와 포인터에 대해 배워보도록 하자. 1. 여기서 메모리는 '가상 메모리'이다.앞으로 언급할 '메모리'라는 것은 모두 가상 메모리(Virtual Memory)를 의미한다. 예전 OS 관련 포스팅에서 가상 메모리에 대해 배웠던 적이 있다. 가상 메모리가 등장한 이유를 알아보려면 사실 옛날로 돌아가야 하는데, 관련해서 널널한 개발자님이 본인 유튜브에 공개한 영상이 있어서 10분 남짓되는 영상이니 꼭 한번 시청해보고 글을 읽는 것을 제안한다. 영상을 보았..
[C] 제어문과 반복문, 그리고 배열과 함수 🔊 해당 포스팅은 인프런의 널널한 개발자님의 독하게 시작하는 C 프로그래밍 강의를 듣고 개인적인 복습 목적 하에 작성된 글입니다. 해당 포스팅에 사용된 모든 자료는 필자가 직접 재구성하였음을 알립니다.  이번 포스팅에서는 C언어로 제어문과 반복문을 작성하는 방법을 배워보고, 이후에는 C언어에서 배열과 문자열을 다루는 방법, 마지막으로는 함수를 정의하는 방법에 대해 알아보도록 하자.1. 제어문 : if 문!모든 언어에서 그렇듯이 제어문은 if 라는 키워드를 사용해서 정의한다. if 문을 사용하는 예시 소스코드를 보자. #include int main(void) { int nAge = 0, threshold = 20; printf("나이를 입력하세요: "); scanf("%d", &nAge..
[C] 다양한 연산자에 대해 알아보자 🔊 해당 포스팅은 인프런의 널널한 개발자님의 독하게 시작하는 C 프로그래밍 강의를 듣고 개인적인 복습 목적 하에 작성된 글입니다. 해당 포스팅에 사용된 모든 자료는 필자가 직접 재구성하였음을 알립니다. 이번 포스팅에서는 C언어에서 사용하는 다양한 연산자에 대해 알아보도록 하자. 연산자의 종류에는 산술 연산자, 대입 연산자, 형변환 연산자, 단항 증/감 연산자, 비트 연산자, 관계/논리/조건 연산자, size of 연산자가 있다. 그리고 이 연산자들 간에는 실행되는 우선순위가 존재한다. 그리고 만약 우선순위가 같은 연산자가 존재한다면 대부분은 왼쪽에 있는 연산자를 먼저 수행하게 된다. 연산자의 우선순위에 대한 표는 다음과 같다. 1. 산술 연산자가장 먼저 알아볼 연산자는 산술 연산자이다. 대표적인 예시로..
[C] 문자와 문자열의 입/출력 🔊 해당 포스팅은 인프런의 널널한 개발자님의 독하게 시작하는 C 프로그래밍 강의를 듣고 개인적인 복습 목적 하에 작성된 글입니다. 해당 포스팅에 사용된 모든 자료는 필자가 직접 재구성하였음을 알립니다. 최근에 CS(Computer Science) 공부를 이론으로 접하면서 어딘가 답답한 느낌이 들었다. 뭔가 이론적으로는 배우긴 했는데, 피부에 와닿지 않는 느낌이었다. 한참을 고민하다가 문득 생각이 들었다. CS를 코드 레벨로 이해하면 어떨까? 했다. 그리고 필자가 메인으로 사용하는 Python은 C로 구현된 CPython 구현체이다. 결국 Python의 내부 동작을 깊이 이해하기 위해서라도 C언어에 대한 학습은 필요했다. 그래서 널널한 개발자님의 강의를 결제하고 2가지 목적(CS를 코드 레벨로 이해하기,..