*헤더파일

 

- 헤더파일 만드는 방법 C언어에서 제공하는 라이브러리를 포함 < .h >

  사용자 헤더파일 " .h "

 

 

 

 

 

 

 

 

 

 

 

 

 

#헤더파일에 선언한 함수를 소스파일에서 실행

 

 

 

 

 

 

 

 

 

 

#이중 포인터

 

- 이중 포인터(double pointer) : 포인터를 가리키는 포인터

 

 

 

 

 

 

 

#이중 포인터 프로그램

 

 

 

 

 

 

 

 

 

 

#순환(recursion)

 

- 알고리즘이나 함수가 수행 도중에 자기 자신을 다시 호출하여 문제를 해결하는 기법

 

- 팩토리얼의 정의

 

 

 

 

 

 

 

 

 

#재귀 함수

 

- 자기 자신을 재호출 하는 형태로 정의된 함수를 가리켜서 재귀함수라 한다.

 

- 함수의 복사본을 cpu가 읽을 수 있도록 명령문에 추가된다.

 

- 재귀함수는 어떤 조건으로 멈추지않으면 계속 함수가 무한반복 되기 때문에 멈추는 조건이 필요하다.

 

 

 

 

 

 

 

 

 

#탈출 조건이 없다면?

 

 

 

 

 

 

 

 

 

 

 

#재귀 함수의 이해

 

 

 

 

 

 

 

 

 

 

 

#팩토리얼 구하기

 

- 팩토리얼 프로그래밍 #2 : (n - 1)! 팩토리얼을 현재 작성중인 함수를 다시 호출하여 계산(순환 호출)

 

 

 

 

 

 

 

 

 

 

 

#팩토리얼 호출 순서

 

 

 

 

 

 

 

 

 

 

 

 

 

#팩토리얼 구하기 예제

 

 

 

 

 

 

 

*정렬

 

- 정렬은 물건을 크기순으로 오름차순이나 내림차순으로 나열하는 것

 

- 정렬은 컴퓨터 공학분야에서 가장 기본적이고 중요한 알고리즘 중의 하나이다.

 

 

 

#선택 정렬

 

- 선택 정렬(selection sort) : 정렬이 안된 숫자들 중 최소값을 선택하여 배열의 첫 번째 요소와 교환하는 것

 

 

 

 

 

 

 

#순차 탐색

 

- 순차 탐색(sequential search) : 배열의 원소를 순서대로 하나씩 꺼내서 탐색키와 비교하여 원하는 값을 찾아가는 방법이다.

 

 

 

 

 

 

 

 

 

 

#이진 탐색

 

- 이진 탐색(binary search) : 정렬된 배열의 중앙에 위치한 원소와 비교를 되풀이

 

 

 

 

 

 

 

 

 

 

 

 

#문자 검색 : strchr()

 

 

 

 

 

 

 

 

 

 

 

 

#전처리기(Preprocessor) : 컴파일하기 앞서서 소스파일을 처리 하는 컴파일러의 한 부분

 

 

 

 

 

 

 

 

 

 

 

#전처리기 요약

 

 

 

 

 

 

 

 

 

 

#매크로 개념

 

 

 

 

 

 

 

 

 

 

 

 

 

#매크로 종류

 

*단순 매크로

 

- 단순 매크로(macro) : 숫자 상수를 기호 상수로 만든 것

 

 

 

 

 

 

 

 

 

 

 

 

*함수 매크로

 

- 함수 매크로(function-like macro) : 매크로가 함수처럼 매개변수를 가지는 것

 

Ex) #define Square(x) ((x) * (x))

 

 

 

 

 

 

 

 

 

#함수 매크로의 장단점

 

- 함수 호출 단계가 필요없어 실행 속도가 빠르다.

 

- 소스 코드의 길이가 길어진다.

 

 

*간단한 기능은 매크로를 사용

 

- #define MIN(x,y)   ((x)) < (y) ? (x) : ((y))

- #define ABS(x)      ((x)) > 0 ? (x) : -((x))

 

 

*매크로를 한줄 이상 연장하는 방법

 

- #define PRINT(x) if(debug==1 && \

mode ==1)\

printf("%d",x);

 

 

 

 

 

#ifdef

 

- 어떤 조건이 만족되었을 경우에만 컴파일하는 조건부 컴파일 지시

 

- 조건부 컴파일을 위한 매크로

 

#if 조건이 참일 경우에는

 ... 실행

#endif

 ...여기까지

 

 

 

 

 

 

 

 

 

 

 

#if

 

- 기호가 참으로 계산되면 컴파일

 

- 조건은 상수여야 하고 논리 , 관계 연산자 사용 가능

 

 

사용 형식

 

#if 조건

    문장들 

#endif

 

- 매크로의 값이 참이면 #if와 #endif 있는 모든 문장들을 컴파일

 

 

 

 

*메모리 할당

 

- 코드영역  : 실행할 프로그램의 코드가 저장되는 메모리 공간

   CPU는 코드 영역에 저장된 명령문을 하나씩 가져다가 실행한다.

 

 

- 데이터 영역 : 전역변수와 static 변수가 할당되는 영역

                    프로그램 시작과 동시에 할당되어 종료시 까지 남아있는 특징의 변수가 저장되는 영역

 

 

- 힙 영역 : 프로그래머가 원하는 시점에 메모리 공간에 할당 및 소멸을 하기위한 영역

              동적 메모리가 할당되는 부분

 

 

- 스택 영역 : 지역변수와 매개변수가 할당되는 영역

                 함수를 빠져나가면 소멸되는 변수를 저장하는 영역 

 

 

 

 

 

 

 

 

 

 

#동적 할당 메모리의 개념

 

- 프로그램이 메모리를 할당받는 방법

 

1. 정적(static)

2. 동적(dynamic)

 

 

 

#동적 메모리 할당

 

- 실행 도중에 동적으로 메모리를 할당받는 것

 

- 사용이 끝나면 시스템에 메모리를 반납

 

- score = (int *)

  malloc(100*sizeof(int));

 

- 필요한 만큼만 할당을 받고 메모리를 매우 효율적으로 사용

 

- malloc() 계열의 라이브러리 함수를 사용

 

 

 

#void *malloc(size_t size)

 

- size는 byte의 수

 

- malloc()함수는 메모리 블럭의 첫 번째 byte에 대한 주소를 반환

 

- 만약 요청한 메모리 공간을 할당할 수 없는 경우에만 NULL값을 반환

 

 

 

#정적,동적 메모리 할당과 해제

 

 

 

 

 

 

 

 

 

#malloc() 함수

 

- 함수 안에서 이름을 입력받아 메인에 출력

 

- malloc() - 헤더파일 : stdlib.h (malloc+사촌)

                            : malloc.h (malloc만 사용)

 

- 힙 영역의 메모리 공간 할당과 해제

 

- 할당 void* malloc(size);

 

/*

malloc함수는 인자로 숫자만 전달받을 뿐이니

할당 되는 메모리의 용도를 알지 못한다.

따라서 메모리의 포인터 형을 결정 못한다.

형변환의 과정을 거쳐서 할당된 메모리의

주소값을 저장!

*/

 

 

 

#free() 함수 : malloc()함수로 사용한 메모리 해제

 

- void free(포인터 변수명);

 

- 메모리 해제를 하지 않으면 메모리 부족과 같은 문제를 일으킬 수 있으니 꼭 해제하는 습관을 들이자.

 

 

 

 

#malloc() 함수 사용 예

 

 

 

*정수

 

 

 

 

 

 

 

 

 

*문자

 

 

 

 

 

 

 

 

 

 

*학생 점수를 입력 받아보기

 

 

 

 

 

 

 

 

 

#malloc() 함수에 의한 배열 공간 할당

 

 

 

 

 

 

 

 

 

 

 

#calloc()함수

 

 

 

 

 

 

 

 

 

 

 

 

 

#realloc() 함수

 

 

 

 

 

 

 

 

 

 

#자기 참조 구조체 정의

 

*자기 참조 구조체(self reference struct)

 

- 구조체의 멤버중의 하나가 자기 자신의 구조체 포인터 변수를 갖는 구조체

 

 

*구조체 selfref

 

- 멤버로 int형 n과 struct selfref *형 next로 구성

 

- 즉 멤버 next의 자료형은 지금 정의하고있는 구조체의 포인터형

 

- 구조체 selfref는 자기 참조 구조체

 

- 구조체의 멤버중의 하나가 자기 자신의 구조체 포인터 변수

 

- 구조체는 자기 자신 포인터를 멤버로 사용할 수 있으나 자기 자신은 사용 불가능

 

 

 

 

 

#구조체를 이용한 동적 할당

 

 

 

 

 

 

 

 

#두대의 자동차를 입력받아서 메모리 공간을 할당받고 정보를 출력받는 프로그램

 

 

 

 

 

+ Recent posts