Pointer의 선언은 다음과 같은 방식을 통하여 이루어 진다.
*a는 정수 타입이라는 결과를 나타낸다. * 연산자가 '간접지정 연산자'라는 것을 알고 있다면 a가 정수를 가리키는 포인터라는 것도 알 수 있을 것이다.
간접지정 연산자는 포인터 값에서만 유효하다. 포인터는 결과를 가리키고, 간접지정 연산자는 결과를 얻는 포인터를 '따라'간다.
C언어의 형식이 자유롭기 때문에 다음과 같이 타입 바로 뒤에 *를 사용할 수 있다.
이런 형식의 선언은 위에서 보았던 선언과 동일한 의미이면서도 a가 int 타입이라는 것을 더욱 더 분명하게 나타내준다. 그러나 이런 스타일의 선언은 좋지 않다. 다음 예를 보면 그 이유를 더욱 분명하게 알 수 있다.
보통 이러한 선언을 보았을 때 b, c, d 모두 정수 포인터 변수라고 이해하지만, 실제로는 그렇지 않다. 그렇게 보이기 때문에 착각을 하는 경우인데, *b의 한부분이 포인터로 선언된 것이며, 나머지 c, d는 일반 정수 변수이다.
따라서 b, c, d 모두를 포인터 변수로 선언하려면 다음과 같이 선언하는 것이 정확하다.
포인터 벼수 선언에서 변수의 초기값을 지정할 수 있다. 다음은 포인터를 선언하고 문자열 리터럴로 초기화하는 예를 보여준다.
이 문장은 message를 문자 포인터로 선언하고 문자열 리터럴의 첫 문장의 주소로 초기화했다. 하지만 이런식의 초기화는 한가지 위험요소를 가지고 있는데 의미를 잘못 해석할 수 있다는 것이다. 위의 선언은 다음과 같다.
int *a;
*a는 정수 타입이라는 결과를 나타낸다. * 연산자가 '간접지정 연산자'라는 것을 알고 있다면 a가 정수를 가리키는 포인터라는 것도 알 수 있을 것이다.
간접지정 연산자는 포인터 값에서만 유효하다. 포인터는 결과를 가리키고, 간접지정 연산자는 결과를 얻는 포인터를 '따라'간다.
C언어의 형식이 자유롭기 때문에 다음과 같이 타입 바로 뒤에 *를 사용할 수 있다.
int* a;
이런 형식의 선언은 위에서 보았던 선언과 동일한 의미이면서도 a가 int 타입이라는 것을 더욱 더 분명하게 나타내준다. 그러나 이런 스타일의 선언은 좋지 않다. 다음 예를 보면 그 이유를 더욱 분명하게 알 수 있다.
int* b, c, d;
보통 이러한 선언을 보았을 때 b, c, d 모두 정수 포인터 변수라고 이해하지만, 실제로는 그렇지 않다. 그렇게 보이기 때문에 착각을 하는 경우인데, *b의 한부분이 포인터로 선언된 것이며, 나머지 c, d는 일반 정수 변수이다.
따라서 b, c, d 모두를 포인터 변수로 선언하려면 다음과 같이 선언하는 것이 정확하다.
int *b, *c, *d;
포인터 벼수 선언에서 변수의 초기값을 지정할 수 있다. 다음은 포인터를 선언하고 문자열 리터럴로 초기화하는 예를 보여준다.
char *message = "Hello World!";
이 문장은 message를 문자 포인터로 선언하고 문자열 리터럴의 첫 문장의 주소로 초기화했다. 하지만 이런식의 초기화는 한가지 위험요소를 가지고 있는데 의미를 잘못 해석할 수 있다는 것이다. 위의 선언은 다음과 같다.
char *message;
message = "Hello World!";
'Architecture for Software > C and C++' 카테고리의 다른 글
Eclipse 3.4 (CDT)와 Cygwin으로 C/C++ 개발환경 설정하기 (6) | 2009.11.11 |
---|---|
C 언어의 문자열 리터럴(String Literal) (1) | 2008.10.06 |
C / C++ 컴파일 과정(Compilation Process) (3) | 2008.10.03 |
ANSI C 호환 컴파일러의 환경에 대하여 (2) | 2008.10.02 |
C에서 사용되는 형식 지정자 (0) | 2008.10.01 |