포인터
-
[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] 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] 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] 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 까지의 문자가 올 수 있다. 우리는 흔히 자신의 컴퓨터 사..