포인터(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형은 4만큼, 문자형은 1만큼, 부동소수형은 8만큼 증가했죠? 메모리공간에 각각 4,1,8바이트의 크기를 가지기 때문에 주소를 1증가하면, 자료형의 크기만큼 증가합니다.
자료형의 크기가 기억 나지 않는분들은 http://parkdream.tistory.com/4 글을 참고하시면 됩니다.
스타일 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 |