C 14

[c언어 개념] #17 파일의 분할과 헤더파일 디자인

c언어 개념 정리와 문제 풀이를 통해 알고리즘 수업을 준비하는 과정입니다. 그동안 수강했던 c언어 수업 자료와 윤성우의 열혈 C 프로그래밍의 내용을 포함해 저에게 기록할 가치가 있는 내용이 담겨 있습니다. 파일의 분할 하나의 파일로 프로그램을 작성하면, 프로그램의 크기가 커졌을 때 관리하기가 어려워진다는 문제점이 발생한다. 따라서 여러 개의 파일을 만들어서 서로 연관 있는 함수와 변수들을 구분해서 담는다. 컴파일러는 파일 단위로 컴파일을 진행한다. 쉽게 말해 컴파일러는 다른 파일의 정보를 참조해 컴파일을 진행하지 않는다. 외부에 선언 및 정의되었다고 컴파일러에게 알려줘야 한다. extern int num; 위의 선언은 변수 num을 할당하는 선언이 아니라 num의 자료형이 무엇이고, 어디에 선언되어 있는..

Algorithm/C 2022.08.13

[c언어 개념] #14 파일의 개방 모드, 파일 입출력 함수, 파일 위치 지시자

c언어 개념 정리와 문제 풀이를 통해 알고리즘 수업을 준비하는 과정입니다. 그동안 수강했던 c언어 수업 자료와 윤성우의 열혈 C 프로그래밍의 내용을 포함해 저에게 기록할 가치가 있는 내용이 담겨 있습니다. 파일의 개방 모드 fopen 함수의 두 번째 인자로 "rt", "wt" 외에도 형성할 스트림의 종류는 다양하다. 다음 2가지 기준을 통해서 스트림을 구분할 수 있다. 1. 읽기 위한 스트림 or 쓰기 위한 스트림 데이터의 이동방향을 통해서 스트림을 다음 4가지로 구분할 수 있다. 데이터 READ 스트림 - 읽기만 가능 데이터 WRITE 스트림 - 쓰기만 가능 데이터 APPEND 스트림 - 쓰되 덧붙여 쓰기만 가능 데이터 READ/WRITE 스트림 - 읽기, 쓰기 모두 가능 c언어는 이를 바탕으로 총 6..

Algorithm/C 2022.07.27

[c언어 개념] #13 파일 입출력

c언어 개념 정리와 문제 풀이를 통해 알고리즘 수업을 준비하는 과정입니다. 그동안 수강했던 c언어 수업 자료와 윤성우의 열혈 C 프로그래밍의 내용을 포함해 저에게 기록할 가치가 있는 내용이 담겨 있습니다. 파일과 스트림 파일은 운영체제에 의해서 관리가 되기 때문에 운영체제와 파일의 관계를 먼저 이해해야 한다. 프로그램상에서 파일에 저장되어 있는 데이터를 참조하고 싶을 때 가장 먼저 해야 할 일은 프로그램과 파일 사이에 데이터가 이동할 수 있는 다리를 놓는 일이다. 데이터 이동의 경로가 되는 다리를 '스트림'이라 하고, 앞선 포스팅에서 다룬 적 있다. 즉 프로그램과 파일 사이에 스트림을 형성해야 데이터를 주고 받을 수 있다. 스트림이라는 것은 운영체제에 의해서 형성되는 소프트웨어적인 상태를 의미하는 것일 ..

Algorithm/C 2022.07.27

[c언어 개념] #12 구조체, 구조체 배열, typedef, 공용체, 열거형

c언어 개념 정리와 문제 풀이를 통해 알고리즘 수업을 준비하는 과정입니다. 그동안 수강했던 c언어 수업 자료와 윤성우의 열혈 C 프로그래밍의 내용을 포함해 저에게 기록할 가치가 있는 내용이 담겨 있습니다. 구조체(structure) 구조체는 하나 이상의 변수를 묶어서 새로운 자료형을 정의하는 도구이다. 기본 자료형 변수를 묶어서 새로운 자료형을 만드는 것이고, '사용자 정의 자료형'이라 한다. 구조체를 통해서 연관 있는 데이터를 하나로 묶을 수 있는 자료형을 정의하면, 데이터의 표현 및 관리가 용이해지고, 그만큼 합리적인 코드를 작성할 수 있게 된다. struct person { char name[20]; char phoneNum[20]; int age; }; 이렇게 하면 person이라는 이름의 구조체..

Algorithm/C 2022.07.25

[c언어 개념] #11 문자와 문자열 함수

c언어 개념 정리와 문제 풀이를 통해 알고리즘 수업을 준비하는 과정입니다. 그동안 수강했던 c언어 수업 자료와 윤성우의 열혈 C 프로그래밍의 내용을 포함해 저에게 기록할 가치가 있는 내용이 담겨 있습니다. 스트림과 데이터의 입출력 데이터의 입력과 출력은 프로그램의 흐름을 뜻한다. 프로그램을 중심으로 프로그램 안으로 데이터가 흘러 들어오는 것이 입력이고, 프로그램 밖으로 데이터가 흘러 나가는 것이 출력이다. 대표적인 입력장치로는 키보드가 있으며, 파일도 입력의 대상이 될 수 있다. 대표적은 출력장치로는 모니터가 있으며, 파일도 출력의 대상이 될 수 있다. 우리가 구현하는 프로그램과 모니터, 프로그램과 키보드는 연결되어 있지 않고 서로 떨어져 있는 개체이다. 따라서 프로그램상에서 모니터와 키보드를 대상으로 ..

Algorithm/C 2022.07.25

[c언어 개념] #10 함수 포인터, void 포인터

c언어 개념 정리와 문제 풀이를 통해 알고리즘 수업을 준비하는 과정입니다. 그동안 수강했던 c언어 수업 자료와 윤성우의 열혈 C 프로그래밍의 내용을 포함해 저에게 기록할 가치가 있는 내용이 담겨 있습니다. 함수 포인터란? 변수 뿐만 아니라 함수들도 바이너리 형태로 메모리 공간에 저장되어서 호출 시 실행이 된다. 메모리상에 저장된 함수의 주소 값을 저장하는 포인터 변수가 '함수 포인터 변수'이다. 함수의 이름은 메모리상에 저장된 함수의 주소 값을 의미한다. 배열이름이 배열의 시작주소 값을 의미하듯, 함수이름도 함수가 저장된 메모리 공간의 주소 값을 의미하는 것이다. 그럼 함수 포인터 변수는 어떻게 선언해야 할까? 이를 위해서는 먼저 함수 포인터의 포인터 형을 결정해야 한다. 모든 변수가 그러하듯 형을 결정..

Algorithm/C 2022.07.24

[c언어 개념] #9 포인터의 포인터, 이중 포인터, 배열 포인터, 포인터 배열

c언어 개념 정리와 문제 풀이를 통해 알고리즘 수업을 준비하는 과정입니다. 그동안 수강했던 c언어 수업 자료와 윤성우의 열혈 C 프로그래밍의 내용을 포함해 저에게 기록할 가치가 있는 내용이 담겨 있습니다. 포인터 변수를 가리키는 이중 포인터 변수(더블 포인터 변수) 포인터 변수는 종류에 관계없이 무조건 주소 값을 저장하는 변수이다. 차이가 나는 것은 포인터 변수가 가리키는 대상일 뿐이다. 이중 포인터 변수가 가리키는 대상은 싱글 포인터 변수이다. 이중 포인터 변수에 들어가는 값은 싱글 포인터 변수의 주소 값이다. #include int main(void) { double num = 3.14; double *ptr = # double ** dptr = &ptr; double *ptr2; ptr2 =..

Algorithm/C 2022.07.24

[c언어 개념] #8 2차원 배열

c언어 개념 정리와 문제 풀이를 통해 알고리즘 수업을 준비하는 과정입니다. 그동안 수강했던 c언어 수업 자료와 윤성우의 열혈 C 프로그래밍의 내용을 포함해 저에게 기록할 가치가 있는 내용이 담겨 있습니다. 2차원 배열의 메모리상 할당 형태 1차원 배열과 마찬가지로 2차원 배열도 메모리상에는 1차원의 형태로 존재한다. 2차원 배열 선언 동시에 초기화 1차원 배열과 마찬가지로 2차원 배열도 선언과 동시에 초기화가 가능하다. 초기화 리스트 안에는 행 단위로 초기화할 값들을 별도의 중괄호로 명시하거나, 중괄호 하나 안에 값들을 다 적을 수 있다. 모든 배열요소를 초기화해야 하는 것은 아니다. 일부 요소에 대해서 초기화를 생략할 수 있다. 부분 초기화의 경우 초기화 하지 않은 공간은 1차원 배열의 경우와 마찬가지..

Algorithm/C 2022.07.24