본문 바로가기
C

포인터 개념

by 상레알 2010. 6. 11.

포인터란? 메모리의 주소 값을 저장하기 위한 변수이다.

즉 포인터란 기본 자료형 변수와 달리 메모리 공간의 주소 값을 저장하는데 사용되는 변수를 말하는 것이다. 그래서 흔히 포인터가 변수라는것을 강조하기 위해서 '포인터 변수' 라는 표현을 많은 사람들이 포인터와 포인터 변수를 다른 것으로 이해하는 경향이 있는데, 이 둘은 같은 것이다. (이 책에서는 포인터와 포인터 변수라는 표현을 흐름에 적절하게 혼용해서 쓸것이다.) 다시 한번 말하지만 포인터와 포인터 변수는 같은 것이다.

- 포인터는 const 키워드에 의해서 상수화 되기도 한다. 그러나 이는 변수가 상수화되는 것이므로 포인터는 변수라는 주장을 해도 틀리지는 않는다고 한다.;;

int main(void)
{

int *a;                //a라는 이름의 int형 포인터
char *b;             // b라는 이름의 char형 포인터
double *c;          // c라는 이름의 double형 포인터

위에서 처럼 포인터를 선언 할때는 *연산자를 사용한다.(* 연산자는 참으로 다양한 용도로 사용된다.)
물론 포인터를 선언만 하고 초기화를 하지 않앗으므로 현재 포인터가 지니고 있는 값은 쓰레기 값을 지니고 있게 된다.
위 선언의 예를 봐서 알수 있지만 포인터의 선언에도 타입/ 즉 포인터 타입이 존재한다는 것이다 . 가리키고자 하는 변수의 자료형에 따라서 적절한 타입의 포인터를 선언해야 한다.

여기서 의문이 드는게.. sizeof 연산자를 이용해서 타입별 포인터 변수의 크기를 계산해 보면 모두 4바이트이다. 따라서 메모리의 주소 값을 지니기 위해 타입을 나눌 필요까지는 없었을거라는 생각도 하게 된다. 그렇다는 포인터의 타입을 나눠 놓은 이유는?
포인터에 타입이라는 것이 존재하지 않는다면 포인터를 이용하여 변수를 참조하는 경우 몇 바이트를 읽어야 할지 알 수 없게 된다.포인터의 타입은 메모리를 참조하는 방법을 알려주는 역활을 한다.

그리고 여기서 새롭게 알게된 printf ()의 새로운 함수 형식 지정자 %p

%p : 변수의 값이 아닌, 변수의 주소를 헥사로 표현할 때 사용한다.

#include <stdio.h>

void main()
{

 int a, *p,score[50];
 a=6;
 p=&a;
 printf("Pointer Addres = %p \n",p);
 printf("Memory Address = %p \n",&a);
 p = score;
 printf("Pointer Addresss = %p \n",p);
 printf("Memory Address   = %p \n", score);

}

'C' 카테고리의 다른 글

메모리 초기화 관련..오류  (0) 2011.04.01
return 의미  (0) 2011.03.29
파일 입출력  (0) 2010.11.23
재지정( redirection) 이란  (0) 2010.11.23
공백포함 문자 입력  (0) 2009.05.07
구조체 포인터...  (0) 2009.04.07
파일 접근 모드  (0) 2009.03.31
라이브러리  (0) 2009.02.24
C 라이브러리 제작? 사용  (0) 2009.02.24
연산자 우선순위  (0) 2009.02.16