안녕하세요 ! 초보개발자 입니다.
이 블로그는 개인 공부 정리용 블로그 입니다.
혹 잘못된 내용이 있다면 지적 부탁드리겠습니다.
그리고 질문주신다면 최대한 아는선에서 답변드리도록 하겠습니다.
그럼 시작하도록 하겠습니다.
1. 포인터
1. 변수와 메모리 주소
int i = 1; 이 코드는 int형 타입의 변수 i를 선언하고 1을 저장한 코드입니다. 변수 i는 메모리 어딘가에 저장될 것 입니다.
위 그림에서 파란색 부분이 i 변수 입니다. 메모리의 주소는 0x100 ~ 0x103 까지 4byte의 공간이 주어졌습니다. 요약하면 다음과 같습니다.
변수의 이름 : i
변수의 타입 : int
메모리 주소 : 0x100
값 : 0x000000001
이때까지 변수를 변수의 이름으로만 다루었지만 변수를 주소로 다루는 것도 가능합니다. 메모리의 저장공간은 고유의 주소를 가지고 있기 떄문에 주소만 알면 값을 불러오거나 저장 할 수 있습니다. 이 처럼 메모리의 주소를 다루기 위한 것이 포인터라고 할 수 있습니다.
2. 포인터
포인터는 메모리 주소를 저장하기 위한 변수 입니다. 포인터를 선언하는 방법은 변수를 선언하는 법과 똑같습니다. 단지 포인터는 메모리 주소를 저장하기 위한 것만 다릅니다. 포인터를 선언하는 방법은 다음과 같습니다.
int * ptr ;
ptr은 포인터의 이름을 뜻하고 int * 은 포인터의 타입 int는 포인터가 가리키는 대상의 타입을 뜻합니다.
포인터에 주소를 저장하기 위해서는 먼저 포인터가 가리킬 대상의 주소를 얻어야 합니다. 주소를 얻는 방법은 &연산자를 사용하는 것입니다. &연산자는 scanf함수를 사용할 때 많이 본 것입니다.
int i =1;
int *ptr = &i;
위의 소스는 변수 i를 선언하고 i의 주소값을 포인터 변수 ptr에 저장한 것입니다. 예제를 통하여 알아 보겠습니다.
1 2 3 4 5 6 7 8 | int main(void) { int i = 1; int *ptr = &i; printf("i = %d\n", i); printf("ptr = %p\n", ptr); return 0; } | cs |
위의 소스를 실행하면 i = 1, ptr = 006FFAAB가 나옵니다. ptr 은 변수 i 의 주소 값을 가지고 있습니다. ptr은 실행때 마다 주소 값이 달라지므로 매번 결과가 다릅니다. 메모리 주소를 출력하는 지시자는 %p 입니다.
포인터가 가리키는 대상에 저장된 값을 가지고 올 떄는 *연산자를 사용합니다.
위의 소스에서 printf("*ptr = %d\n",*ptr); 을 추가하면 변수 i 와 같은 저장공간의 값을 가져 오게 됩니다.
이상으로 오늘의 강의는 마치도록 하겠습니다. 다음시간에는 포인터를 이어서 진행하도록 하겠습니다.
'프로그래밍 > C언어' 카테고리의 다른 글
[C언어] 포인터(3) - 포인터와 배열 (0) | 2017.04.23 |
---|---|
[C언어] 포인터(2) - 포인터의 형변환 (3) | 2017.04.23 |
[C언어] 지역변수, 전역변수,정적변수 (1) | 2017.04.19 |
[C언어] 함수(2) (1) | 2017.04.18 |
[C언어] 함수(1) (1) | 2017.04.17 |