포인터(Pointer)


 C언어가 고급 언어이면서, 저급 언어로도 불리는 가장 큰 이유는 메모리를 직접 제어할 수 있는 포인터 때문입니다. 포인터는 주어진 메모리를 가리키는 것으로, 메모리 공간에 대한 이해가 필요합니다. 우선 메모리 공간에 대해 알아보겠습니다. 


- 메모리 공간

 메모리 공간은 순서대로 정렬되어있는 연속된 값으로, 메모리 주소당 1바이트의 크기를 가집니다. 메모리는 여러 의미가 있지만, C언어에서는 변수가 사용하는 공간으로, 변수를 선언하게되면 일정 메모리 공간을 점유하게됩니다. 


- 포인터

 포인터는 "자료형 *변수이름;" 과 같이사용하며, 주소를 사용하는 것과 메모리 주소로 사용하는것이 있습니다. 아래 코드를 보면, 포인터는 변수 a의주소를 가리키므로, pointer를 출력하면 a의 주소가 출력되고, *pointer를 출력하면 변수 a의값인 10이 출력됩니다.

----------------------------------------------------------------------------------------

#include <stdio.h>


int main()

{

int a=10;

int *pointer;

pointer = &a;

printf("a : %d \n", a);

printf("&a : %d \n", &a);


printf("pointer : %d \n", pointer);

printf("*pointer : %d \n", *pointer);


return 0;

}

------------------------------------------------------------------------------------------

 

- 포인터 주소값 조작

포인터의 주소값을 이용해서, 주소값을 조작할 수 있습니다. 다음과 같이 정수형, 문자형, 부동소수형 변수를 선언한뒤에 주소값을 1씩 증가시켰습니다. 결과값이 어떻게 출력될까요?

----------------------------------------------------------------------------------------

#include <stdio.h> 

int main()
{
int a=10;
char b='a';
double c=3.14;

int *ptr1;
char *ptr2;
double *ptr3;

ptr1 = &a;
ptr2 = &b;
ptr3 = &c;

printf("ptr1 : %d \nptr1+1 :%d \n", ptr1, ptr1 + 1);
printf("ptr2 : %d \nptr2+1 :%d \n", ptr2, ptr2 + 1);
printf("ptr3 : %d \nptr3+1 :%d \n", ptr3, ptr3 + 1);

}

----------------------------------------------------------------------------------------

 결과를 보면 주소가 int형은 4만큼, 문자형은 1만큼, 부동소수형은 8만큼 증가했죠? 메모리공간에 각각 4,1,8바이트의 크기를 가지기 때문에 주소를 1증가하면, 자료형의 크기만큼 증가합니다.

 자료형의 크기가 기억 나지 않는분들은 http://parkdream.tistory.com/4 글을  참고하시면 됩니다.


* 출처 : 한국기술교육대학교 온라인평생교육원 C 프로그래밍_2 

          스타일 C프로그래밍 저.김종훈,김종진 출.WellBook




'언어 > C' 카테고리의 다른 글

[C] 구조체  (2) 2016.12.26
[C] 배열과 포인터  (3) 2016.12.25
[C] 배열  (0) 2016.12.23
[C] 디버깅  (0) 2016.12.21
[C] 매개변수 전달 방식  (0) 2016.12.20

+ Recent posts