프로그래밍
-
[C Language] 36. 1차원 배열과 포인터 - C 언어CSE/C Language 2015. 7. 20. 15:46
1. 1차원 배열과 포인터 변수 초기화 1차원 배열에 대해서는 앞 단원에서 충분히 배웠으므로 여기서는 배열과 포인터의 결합에 대해 알아보도록 하자. 123456789101112131415161718192021 /* * arrp.c * * Created on: 2015. 7. 20. * Author: Yeonsu */ #include int main(void) { int tmp[3] = {15, 77, 41}; int *tmp_p; tmp_p = tmp; printf("%d\n", *tmp_p); return 0;} cs 포인터를 많이 사용해 보지 않았다면 이상하고 생각된 결과 일 것이다. 왜냐하면 tmp_p = tmp에서 tmp의 앞에 & 연산자가 없기 때문이다. 이를 이해하려면 다음 두 가지를 각인시켜..
-
[C Language] 35. 포인터 기초 - C 언어CSE/C Language 2015. 7. 20. 14:08
1. 포인터란? 포인터란 메모리의 위치를 기호화한 표현이다. 우리가 친구 집을 찾아가기 위해서는 주소가 필요한 것처럼 시스템에서도 특정한 값을 찾기 위해서는 주소가 필요하다. 실생활에서의 주소는 시, 도, 군등으로 나누지만 시스템에서는 4 바이트로 표시하도록 되어 있으며 일반적으로 다음과 같이 표기한다. 0x4600F269 상당히 기계적인 표현이라 정이 안가는 형태이지만 포인터를 정복하기 위한 가장 첫 걸음이므로 너무 거부감을 갖지말고 보자. 언젠가는 정감있는 표현으로 다가올 날이 있을 것이다. 0x 는 다음에 이어지는 표현이 16진수임을 뜻하고 연이은 8 자리 문자와 숫자의 조합은 주소 값을 의미한다. 16진수이기 때문에 숫자 중간에 A ~ F 까지의 문자가 올 수 있다. 우리는 흔히 자신의 컴퓨터 사..
-
[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)란 변수를 지정할 때 그 변수가 메모리에 저장되는 위치나 변수가 프로그램에 미치는 범위를 말한다. 처음 프로그램을 작성할 때는 기억부류에 대한 개념 없이 프로그램을 작성해도 되지만 나중에는 반드시 기억부류를 염두에 두면서 프로그램을 작성해야 한다. 그렇지 않으면 프로그램이 커질수록 수정, 보완에 큰 문제가 발생한다. 예를 들어보자. 프로젝트를 진행할 때 하나의 파일, 하나의 함수로 진행하는 경우는 없다. 프로젝트는 보통 수십 개, 수백 개의 파일과 함수로 구성되며, 프로그래머가 각각의 함수나 파일을 담당한다. 어떤 프로그래머는 화면에 관련된 파일과 함수만을 담당하고, 출력에 관한 사항은 또다른 프로그래머가 담당하는 식이다. 프로젝트가 한창 진행 중일 때 알 수 없..
-
[C Language] 30. 2차원 배열 - C 언어CSE/C Language 2015. 7. 18. 14:50
1. 2차원 배열의 정의 2차원 배열은 다음과 같은 형식으로 정의한다. 배열요소형 배열명[첨자1][첨자2]; 2차원 배열은 1차원 배열의 집합체이기 때문에 '배열의 배열'이라고 불리며 행과 열로 구성된다. 2차원 배열이기 떄문에 당연히 첨자는 2개가 필요하며, 1차원과 같이 배열요소는 0부터 시작한다. 첨자 1은 행을 첨자 2는 열을 의미하는데 둘의 순서는 바뀔 수 없다. 2. 2차원 배열의 초기화 2차원 배열의 초기화는 행과 열의 개념만 확실하다면 이해하는 데 큰 무리가 없다. 아래와 같은 방법으로 배열을 초기화 할 수 있다. 1) int tmp[2][3] = {100}; 2) int tmp[2][3] = {100,}; 3) int tmp[2][3] = {100, 5, 7, 11, 12, 93}; 4)..