반응형

포인터의 개념포인터(Pointer)주소(Address)를 저장하는 변수입니다.

  • 모리에는 각각의 바이트를 구분하기 위한 주소가 있습니다.
  • 주소라하면 해당 값이 저장된 컴퓨터 메모리상의 주소를 의미합니다. (예를 들면 num이란 변수에 10의 값이 저장 되어 있다면 *p라는 포인터 변수num의 주소가 저장된다는 것입니다.)주소의 크기도 플랫폼에 따라 다릅니다.
  • 32비트 플랫폼에서는 주소가 4바이트이고, 64비트 플랫폼에서는 주소가 8바이트입니다.포인터 변수를 만들 때는 변수 이름 앞에 *를 넣어주면 그 변수는 포인터 변수가 됩니다.

 

 

▶ 포인터의 선언

>>포인터를 선언할 때 지정하는 데이터형은 포인터가 가리키는 변수가 데이터형이다.

int *p;   

위에서 int는 포인터가 가리키는 변수의 데이터형을 의미하고 *는 포인터 수식어, p는 포인터 변수명을 의미한다.

 

 

 

 

■ 포인터 함수를 이용한 예시를 간단하게 만들어 보았습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
 
int main() {
    int x = 10;
    int* p = &x;
 
    printf(" x의 값 : %d\n",x);
    printf(" x 변수의 주소 값 : %p\n",&x);
 
    printf(" p 변수의 값 : %p\n", p);
    printf(" p가 가리키는 값 : %d\n"*p);
    printf(" p 변수의 주소 값 : %p\n"&p);
 
    *= 20;  //*p의 재정의
    printf(" p가 가리키는 값 : %d\n"*p);
 
 
 
    return 0;
}
cs

 

 

 

■ 포인터 함수를 이용한 예시 실행 결과

 

포인터 예시 실행 결과

 

 

 

위의 결과를 보면 p의 실질적인 값은 x의 주소이며 x의 값을 가리킨다는 것이 보여집니다.

 

여기서 &연산자는 &의 오른쪽에 오는 피연산자의 주소 값을 반환하는 연산자입니다.

 

 &x는 주소 값이므로 &p로 출력하고 *p는 int형 변수이므로 %d로 출력, 포인터도 변수이므로 주소가 있습니다.

 

그리고 보다 눈에 보이는 결과를 위해 *p=20으로 재정의하고(x=20으로 수행됩니다.) 결과를 확인해보았습니다.

 

 

 

 

▶ 포인터의 용도

변수의 이름을 직접 사용할 수 없을 때 함수를 호출한 곳에 있는 지역 변수를 포인터를 이용해서 변경할 수 있습니다.

 

 

 

 

■ 포인터 함수 용도 예시를 간단하게 만들어 보았습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
 
void test1(int x) {
    x = 20;
}
void test2(int* p) {
    *= 30;
}
 
int main() {
    int x = 10;
    test1(x);
    printf("test1 호출 후에 x의 값 : %d\n", x);
 
    test2(&x);
    printf("test2 호출 후에 x의 값 : %d\n", x);
 
 
    return 0;
}
cs

 

 

 

■ 포인터 함수 용도 예시를 간단하게 만들어 보았습니다.

 

포인터 용도 예시 실행 결과

 

 

 

 

■ 포인터가 어떤 변수를 가리키게 될지 아직 모르는 경우

 

  • 포인터가 가리키는 변수가 프로그램 실행 중에 조건에 따라서 결정된다.
  • 여러 변수에 대한 처리를 공통의 코드로 수행하게 만들 수 있다.

 

 

 

▶ 포인터 사용 시 주의사항

  • 포인터는 초기화하고 사용하는 것이 안전합니다.
  • 포인터를 초기화하지 않고 사용하면 실행 에러가 발생합니다.
  • 어떤 변수를 가리킬지 알 수 없을 때는 널 포인터로 초기화합니다.
  • 포인터를 안전하게 사용하기 위해서는 사용할 때 널 포인터인지 검사하고, 널 포인터가 아닌 경우에만 포인터가 가리키는 변수에 접근합니다.
  • 포인터의 데이터형과 포인터가 가리키는 변수의 데이터형이 같아야 합니다.

 

 

 

 

아직 포인터에 대해 글을 완벽히 정리하지 못하여 정리한 부분까지만 포스팅합니다.

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기