본문 바로가기

C38

동적할당 할당의 필요성 프로그램이 실행되기위해서는, 메모리가 필요한다. 왜냐하면, 실행파일 자체가 메모리에 로드되어야 실행될 수 있고,프로그램이 작업을 위해 선언하는 변수도 메모리에 할당되기 때문이다. 만약 int total, average 같은 변수를 선언한다고 하면,컴파일러는 이 두변수들이 값을 제데로 보관할 수 있도록 타입에 맞는 크기만큼메모리를 할당한다.정수형이나 실수형은 아주작아서 이런 변수들때문에 문제가 생길경우는 드물다. 동적 할당(Dynamic Allocation) 이란 프로그램을 작성할때메모리 필요량을 컴파일러가 지정하는 정적 할당과는 달리 실행중에 필요한 만큼 메모리를 할당하는 기법이다.만약 학생들의 점수를 저장하는 변수를 만들때, 보통은 배열을 사용할 것이다. 만약 학생수가 50명이라면int .. 2016. 4. 3.
포인터 포인터란? 메모리의 한 지점, 간단히 말해 번지값을 가지는 변수이다.어떠한 형태의 변수던지(register형만 제외하고) 반드시 메모리에 보관되며 모든 메모리는 번지를 가지고 있다.따라서 이 변수의 번지를 가르키는 포인터 변수를 항상 선언할 수 있다. int, char , double 등 기본적인 데이터 타입에 대하여 int *, char *, double* 형의 변수를 선언할 수 있음은 물론이고, 공용체, 구조체, 배열에 대해서 포인터형을 만들 수도 있다.사용자가 직접 만든 타입에 대해서도 포인터형 변수를 선언할 수 있으며, 심지어는포인터 타입에 대해서도 포인터를 선언할 수 있다. 포인터를 선언할때는가르킬타입 *(에스터리크스) 포인터변수의 이름;이렇게 선언한다.int* ptr; 도 가능하고 int *p.. 2016. 3. 31.
C언어]재귀 - 피보나치 수열 이 문제는 N을 입력하면 N번째의 피보나치 수열 값을 출력한다. 피보나치 수열은 다음과 같다. 1 1 2 3 5 8 13 21...이처럼 N이라면, N-1번째의 수와 N-2 번째의 수를 더한 값을 구한다. 이를 코드로 구현하면 다음과 같다. 1234567891011121314151617#include int print(int b); int main(void){ int a, b=0; scanf("%d", &a); printf("%d\n", print(a));}int print(int b){ if (b == 1 || b == 2) return 1; else return print(b - 1) + print(b - 2);}Colored by Color Scriptercs 먼저 a를 입력받아 전달하고, 이게 1.. 2016. 3. 29.
C언어] 1부터 N까지의 합 이 문제는 N을 입력하면 1부터 N까지의 수들의 합을 구하는 문제이다. 이를 구현하면 다음과 같다.1234567891011121314151617#include int print(int a, int b); int main(void){ int a, b=0; scanf("%d", &a); printf("%d\n", print(a,1));}int print(int a, int b){ if (b-1 == a) return 0; else return b + print(a, b + 1);}cs 먼저 a 를 입력받고, a와1 을 인자로 준다.만약 b 가 a보다 크다면 종료하고, 아니라면 1 + 2, 이런식으로 다시 자신을 호출한다. 2016. 3. 29.