본문 바로가기

[무따기C언어] 9과(포인터의 이해)

반응형

엘리베이터의 버튼 역할을 하는 것이 포인터.

포인터란 한마디로 메모리의 주소를 의미.

포인터는 메모리의 주소(아파트의 층별 위치)를 저장하는 공간이므로 실제 메모리의 내용(각 층별 집의 평수)이 아닌 주소값(층별 위치)이 저장됩니다.

   

자료형_*포인터_변수 이름;

   

C언어에서는 모든 자료형에 대해 포인터를 만들 수 있다. 그 이유는 자료형마다 서로 다른 바이트를 갖고 있기 때문에 그 메모리 영역을 가르키는 포인터는 자료형마다 달라지는 것입니다. 하지만 포인터가 가르키고 있는 자료형의 크기는 자료형의 종류마다 1바이트 또는 4바이트, 어떤 경우에는 8바이트지만 포인터의 크기는 같게 4바이트이다.

   

포인터 변수 = & 일반 변수

   

int data = 10; //정수형 변수 data선언과 초기화

int *ptr // 정수형 포인터 ptr선언

ptr = &data; //변수 data의 주소를 포인터 ptr에 저장

   

짤린부분은 int data = 10;

  • int data =10; 을 실행하면 메모리의 임의의 위치에 10이라는 값을 저장.
  • int *ptr; 포인터 변수 ptr을 위한 자리를 메모리에 마련한다.
  • ptr = &data; 포인터 변수에 다른 변수 주소 대입.

       

       

  • 포인터의 사용 용도.

모드

설명

사용 예

포인터 변수

일반 변수와 같은 형식으로 선언하되 변수의 이름 앞에 *를 붙임니다.

int *ptr;;

char *ptr;

float *ptr;

포인터 변수에 다른 변수 주소 대입

일반적인 변수 이름 앞에 &를 붙여서 포인터 변수에 대입합니다.

int *ptr = &data;

포인터 변수가 가르키는 곳의 값 사용

포인터 변수 이름 앞에 *를 붙여서 사용합니다.

data = *ptr;(포인터 변수에서 값을 읽는 경우)

*ptr = data;(포인터 변수에 값을 쓰는 경우)

   

   

   

   

화면 캡처: 2010-05-26, 오전 3:23

   

   

   

화면 캡처: 2010-05-26, 오전 3:24

   

   

   

화면 캡처: 2010-05-26, 오전 3:32

   

   

   

화면 캡처: 2010-05-26, 오전 3:32

   

   

   

   

사용시 주의사항.

   

int *ptr >>>덜렁 이것만 있고 가르키는 곳이 없으면 총알 없는 총. 그냥 붕 떠있을 따름ㅋ

ptr = &data가 필요하다.

   

*의 사용 햇갈리지 않기.

int *ptr은 포인터 변수 선언하는거고, *ptr = data는 *ptr이 가르키는 위치의 값을 data의 값으로 바꾸라느 명령어.

   

   

1)int *ptr >>포인터 선언

   

2)ptr = &data >>포인터에 명확한 주소 할당.

   

3)*ptr = *ptr + 10 >>포인터를 일반변수처럼 사용.

   

4)(*ptr)++; >> 포인터를 사용하여 포인터에 증가연산자를 사용.

(*ptr)을 하나의 변수처럼 간주하여, 그 변수의 값을 하나 증가하게 한다는 것.

   

5)*ptr++; >>괄호를 사용하지 않고 포인터에 증가 연산자 사용.

*(ptr++)는 포인터의 현재 주소르 하난 증가하고, 증가된 그 주소가 가르키는 값을 나타냄. 아무조건 없이 움직였으니 쓰래기값이 나온다,

   

 

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

   

반응형
-->