C언어
-
[C Language] 43. 포인터 - 매개변수 처리 총정리CSE/C Language 2015. 8. 10. 11:14
1. 매개변수가 1차원 배열인 경우 1차원 배열이 int 형인 경우 1234567891011121314151617181920212223242526272829/* * parameter.c * * Created on: 2015. 8. 10. * Author: Yeonsu */ #include void print_temp(int *, int); int main(void) { int sum; int tmp[] = { 11, 42, 19, 82, 57 }; print_temp(tmp, sizeof(tmp) / sizeof(int)); return 0;} void print_temp(int *tmp, int length) { int i; for (i = 0; i
-
[C Language] 40. 문자열 함수 - C 언어CSE/C Language 2015. 8. 5. 13:29
1. gets(), fgets() 문자열을 사용자로부터 받아들일 때 가장 많이 사용하는 함수는 바로 gets()이다. 하지만 이것은 상당히 위험한 함수이며 초보자는 반드시 fgets()를 사용해야 한다. 이번 단원에서는 gets()의 위험성을 알아보고 이 대신 fgets()를 사용할 것을 권장한다. gets()는 리눅스 메뉴얼에 보면 사용하지 말라는 뜻에서 '저주받은 함수'라는 극한적인 말로 표현되어 있다. 얼마나 위험한지 아래 예제를 통해 알아보도록 하자. 1234567891011121314151617181920 /* * gets.c * * Created on: 2015. 8. 5. * Author: Yeonsu */ #include int main(void) { char name[5]; gets(na..
-
[C Language] 39. 포인터의 포인터 - C 언어CSE/C Language 2015. 8. 5. 11:32
1. 포인터의 포인터란? 이해를 돕기 위해서 배열을 먼저 예로 들어 보자. - 1차원 배열: int apple[5]; - 2차원 배열: int banana[2][10]; - 3차원 배열: int chocolate[3][4][5]; 1차원 배열은 관리 대상이 1차원이며 모두 5개의 요소로 구성되어 있다. 2차원 배열은 관리대상이 2차원이다. 2차원 이라는 것은 1차원 배열의 모임이므로 이것을 '배열의 배열'이라고 칭할 수 있다. 배열의 배열이라는 것은 결국 배열을 관리하는 배열이 존재한다는 것이다. 3차원 배열은 '배열의 배열의 배열'이 되며 2차원 배열을 관리하는 배열이라고 생각하자. 이를 포인터로 적용하면 아래와 같다. - 포인터 변수 정의: char *apple; - 포인터의 포인터 변수 정의: ch..
-
[C Language] 34. 레지스터 변수 - C 언어CSE/C Language 2015. 7. 19. 15:46
레지스터 변수의 특징 1) 메모리가 아닌 CPU 영역을 사용한다. 2) 고속 연산에 사용된다. 3) 전역변수나 정적변수에 사용될 수 없다(지역변수로만 사용가능) 레지스터 변수 사용 예 12345register int i, j; register i, j; register unsigned tmp;cs 왜 레지스터 변수를 사용하는가? 위에서 언급한 것처럼 고속 연산을 수행하기 위해서 사용한다. 하지만 여기에는 몇 가지 전제가 따르는데 다음과 같다. 1) 레지스터 변수의 개수는 시스템마다 그 한계가 다르다. 90 년도의 PC에는 2개였으며 워크스테이션에서는 8개까지 가능하였다. 그 이상의 레지스터 변수는 CPU에 할당되는 것이 아니라 메모리에 할당되므로 무조건 많이 사용한다고 해서 절대로 속도가 빨라지는 것은 ..
-
[C Language] 33. 정적변수 - C 언어CSE/C Language 2015. 7. 19. 15:08
1. 정적변수의 특징 1) 정적변수가 함수의 내부에서 선언되면 내부 정적변수이고 외부에서 선언되면 외부 정적변수이다. 2) 정적변수는 프로그램이 종료될 때까지 생존한다. 즉, 메모리에서 사라지지 않는다. 3) 정적변수는 초기화를 하면 프로그램이 실행될 때 초기화 값으로 딱 한번 초기화된다. 4) 정적변수는 초기화하지 않으면 무조건 0이나 널로 초기화된다. 5) 정적변수는 지역변수와 달리 정적 데이터 영역에 저장된다.(스택에 저장되지 않는다) 6) 내부 정적변수는 변수가 선언된 함수 안에서만 유효하다(다른 함수나 파일에서는 내부 정적변수의 존재를 알지 못하므로 사용될 수 없다.) 7) 외부 정적변수는 변수가 선언된 그 아래에 있는 모든 함수에서 사용될 수 있다(다른 파일에서는 외부 정적변수의 존재를 알지 ..
-
[C Language] 32. 전역변수 - C 언어CSE/C Language 2015. 7. 19. 14:33
1. 전역변수의 특징 1) 함수의 바깥에서 처음 변수를 정의할 때는 기억부류 지정자가 필요하지 않지만 다른 파일의 함수에서 사용할 때는 extern이라는 기억부류 지정자가 필요하다. 즉, 변수에 extern을 앞에 붙이게 되면 다른 파일의 extern으로 선언된 변수를 사용하겠다고 컴파일러에게 알리는 것이다. 2) 전역변수는 사용자가 초기화를 해주지 않으면 무조건 0이나 널로 초기화된다. 3) 전역변수는 프로그램이 시작될 때 딱 한번만 초기화되고 더 이상 초기화되지 않는다. 4) 전역변수는 함수의 외부에서 정의하며 모든 함수, 파일에서 인식하고 처리된다. 5) 전역변수는 프로그램이 끝날때까지 메모리에서 사라지지 않는다. 프로그램이 실행되는 동안에는 항상 메모리에 상주된다. 6) 전역변수는 정적 데이터 영..
-
[C Language] 31. 지역변수 - C 언어CSE/C Language 2015. 7. 19. 13:20
1. 지역변수의 특징 1) auto 라는 기억부류 지정자를 사용한다. 명시하지 않으면 자동으로 시스템이 auto 라고 인식하여 처리하기 때문에 일반적으로 명시하지 않는다. 2) 지역변수는 절대 초기화되지 않는다. 그러므로 초기화는 프로그래머의 몫이다. 3) 함수 안에서의 지역변수를 프로그래머가 초기화를 했다면 함수를 호출할 때마다 지역변수는 초기화된다. 4) 지역변수는 함수의 내부에서 사용하며 함수 안에서만 존재의 의미가 있다. 다른 함수에서는 지역변수를 인식하지 못하기 때문에 다른 함수에서 사용하면 문법 에러를 유발한다. 5) 지역변수를 정의한 함수가 끝나면 지역변수는 자동적으로 메모리에서 사라진다. 6) 지역변수는 스택(stack)이라는 메모리 위치에 저장된다. 2. 지역변수의 사용 예 1234567..
-
[C Language] 31. 기억부류(Storage Class) 개요 - C 언어CSE/C Language 2015. 7. 18. 16:12
1. 기억부류란? 기억부류(Storage)란 변수를 지정할 때 그 변수가 메모리에 저장되는 위치나 변수가 프로그램에 미치는 범위를 말한다. 처음 프로그램을 작성할 때는 기억부류에 대한 개념 없이 프로그램을 작성해도 되지만 나중에는 반드시 기억부류를 염두에 두면서 프로그램을 작성해야 한다. 그렇지 않으면 프로그램이 커질수록 수정, 보완에 큰 문제가 발생한다. 예를 들어보자. 프로젝트를 진행할 때 하나의 파일, 하나의 함수로 진행하는 경우는 없다. 프로젝트는 보통 수십 개, 수백 개의 파일과 함수로 구성되며, 프로그래머가 각각의 함수나 파일을 담당한다. 어떤 프로그래머는 화면에 관련된 파일과 함수만을 담당하고, 출력에 관한 사항은 또다른 프로그래머가 담당하는 식이다. 프로젝트가 한창 진행 중일 때 알 수 없..