easy software

C언어 포인터의 기본 개념(예제2) 본문

C언어/포인터와 배열

C언어 포인터의 기본 개념(예제2)

JAVA 웹개발자 2015. 1. 15. 19:13

안녕하세요. 이번 시간에도 포인터의 기본개념을 활용한 간단한 예제를 해보도록하겠습니다.

 

조건은 간단합니다.

 

int형 변수 a와 b를 선언하고, 그에 맞는 포인터 변수 2개도 생성합니다.

 

그리고 각각 10과 20으로 초기화 해줍시다.

 

후에 포인터변수 p1이 변수 a를 가리키고,

 

포인터변수 p2가 변수 b를 가리키게 합니다.

 

그 이후에 간접 접근 방식에 의해 변수의 값을 1 감소시킵니다.

 

그리고 p1이 변수 b를 p2가 변수 a를 가리키도록 합니다.(서로 가리키는 대상을 바꿔주면 됨)

 

그 이후에 포인터변수가 가리키는 실제 대상이 바뀌었는지 출력해 봅시다.

 

#include <stdio.h>

 

int main(void){

 

     int a = 10;
     int b = 20;

 

     int* p1 = &a;
     int* p2 = &b;

 

     //--연산자가 *연산자보다 우선순위이기 때문에 반드시 괄호로 묶어야 함
     --(*p1);
     --(*p2);

 

 //가리키는 대상을 바꿔줌
 p1 = &b;
 p2 = &a;

 

 //*p1과 *p2에서 *연산자를 빼고 출력하면, 메모리의 주소값이 출력됨
 //*연산자를 붙여줘야 가리키고있는 실제 값이 출력
 printf("%d \n", *p1);
 printf("%d \n", *p2);

 

 return 0;


}

 

코드의 주석에도 적어뒀듯이, 마지막 출력문에서 인자의 값에서 *연산자를 빼고 출력하면

 

a와 b의 실제 메모리 주소를 10진수형으로 확인할 수 있습니다.

 

* 포인터 변수도 변수입니다.

 

int a = 10;

 

int* ptr = &a;

 

위의 코드에서 a의 주소값이 0001xx34라고 한다면, ptr에는 0001xx34가 저장되어있는 것입니다.

 

그리하여 * 연산자를 합쳐서 *ptr을 출력하면 가리키는 대상의 실제값을,

 

* 연산자를 제외하면 포인터 변수에 저장된 대상의 메모리 주소값을 반환하게 되는 겁니다.

 

Comments