C 언어
-
[C Language] 42. void형 포인터 - C 언어CSE/C Language 2015. 8. 5. 14:33
1. void 형 포인터란? 널 포인터가 포인터임에도 불구하고 어느 곳도 가리키고 있지 않는 데 반해, void 형 포인터는 무엇이든 가리킬 수 있는 포인터이다. 널 포인터가 아무것도 넣을 수 없는 자루라면 void 형 포인터는 무엇이든 들어가는 자루이다. void 형 포인터는 현재 가리키고 있는 대상체가 정해져 있지 않는 포인터이다. 바꾸어 말하면 현재 가리키는 대상체가 정해져 있지 않기 때문에 대상체만 정해지면 얼마든지 사용할 수 있다는 의미이다. 2. void 형 포인터 변수 정의 char 형 포인터는 'char *' 로 표기할 수 있고 int 형 포인터는 'int *'로 표기할 수 있다. 마찬가지로 void 형 포인터는 'void *'로 표기한다. void *void_p; void_p는 포인터 변..
-
[C Language] 41. 포인터의 개념을 깨는 '0'CSE/C Language 2015. 8. 5. 13:47
지금까지 배운 포인터에 대한 개념으로 설명이 불가능한 프로그램이 있다. 아래 예제를 보도록하자. 1234567891011121314151617181920/* * nullp.c * * Created on: 2015. 8. 5. * Author: Yeonsu */ #include int main(void) { char *char_p; char_p = 0; printf("%x\n", char_p); return 0;} cs 포인터를 설명할 때 수없이 강조했던 내용이 '포인터 변수에는 주소 값 이외에는 어떠한 값도 할당할 수 없다'라는 것이다. 하지만 위의 프로그램으로 0 이라는 정수 값에 포인터 변수에 할당되고 있으며 컴파일 문제가 발생하지 않는다. 컴파일러는 위의 프로그램을 어떻게 해석하길래 문제가 발생하지..
-
[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] 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)..