포인터 :
-
C++ 의 독특한 특징 중 하나인 포인터
(pointer) 에 대해 알아보겠습니다. 프로그램에 사용되는 명령어나 변수들은 메모리
(RAM) 의 특정 위치에 저장되어 사용됩니다. 이때 메모리를 할당 받은 변수들은 각자 주소 (address) 를
갖고 있습니다.
-
포인터는 데이터
(data) 가 기억되어 있는 메모리의 주소
(address) 를 나타내는 것으로 메모리에 있는 데이터를 관리하기 위해 이용되는 개념입니다. 먼저 포인터 변수를 선언은 다음과 같습니다.
사용법:
'자료형' *'포인터 변수이름' ;
-
포인터 변수로 선언 할 이름 앞에 '*' 를 붙이는 것 이외에는 보통의 변수선언과 유사합니다.
예시) int
*a ;
-
'a' 라는 이름의 정수형 포인터 변수를 선언.
주의사항
#
여기서 포인터 변수는 a
(*a 가 아님).
#
'a' 라는 이름으로 메모리 기억 공간이 할당.
#
'a' 가 가리키는 주소에 기억되어 있는 데이터의 자료형이 정수형
(int).
#
'a' 에는 메모리 주소가 저장되어 있음. (상수값)
#
'a' 가 가리키는 주소에 저장되어 있는 값을 알고 싶을 때는 'a' 앞에 '*' 을
붙이면 됨.
(*a)
주소 연산자 :
-
사용하고 있는 변수들의 주소를 알아내는데 사용되는 연산자로 변수 이름 앞에 붙여 사용합니다.
'&' 기호를 사용합니다.
사용법:
&
'포인터 변수이름' ;
-
간단한 예제를 통해 포인터에 대해 더 알아보겠습니다.
예제코드
#include
<iostream>
using
namespace std;
int
main() {
int a ;
a = 0;
cout << " a = " << a
<< ", address of a = " << &a <<endl;
for(int i = 0; i < 3; i++){
cout << "Enter a natural number :
";
cin
>> a ;
cout << " a = " << a
<< ", address of a = " << &a <<endl;
}
return 0;
}
-
먼저 정수형 변수 'a' 를 선언하였습니다. 그리고 a 에 0 을 대입했습니다. 그리고 'a' 에 저장되어 있는 값과 변수 'a' 의 주소값을 출력하도록 하였습니다.
-
for 반복문을 사용해 간단한 테스트를 하도록 하겠습니다. "Enter
a natural number : " 문장이
출력되고 키보드로 값을 입력 받도록 하였습니다. 입력 받은 값은 변수 'a' 에 대입됩니다. 그리고 다시 한번 'a' 에
저장되어 있는 값과 변수 'a' 의 주소값을 출력하도록 하였습니다. 이 과정을 3 번 반복하도록 하였습니다.
실행결과
- 'a' 에 저장되어 있는 값은 초기 값인 0 이라고 출력되고 변수 'a' 의 주소값 '0x7ffd81bcc688'
이
출력 되었습니다. 그럼 이제 다른 숫자들을 입력해 확인해보겠습니다.
-
숫자 9를 입력하고 엔터를 치면 입력한 9 가 출력되는 것 을 볼 수 있습니다. 변수 'a' 의 주소값은 변함없이 '0x7ffd81bcc688' 인 것을 볼 수 있습니다. 다른 숫자를 입력하면 주소는 변함이 없고 a 의 입력된 숫자만 변하는 것 을 알 수 있습니다.
#include
<iostream>
using
namespace std;
int
main() {
int a ;
int *pa ;
a = 1;
pa = &a;
cout << " a =
" << a << ",
address of a = " << &a << endl;
cout << " *pa = " << *pa
<< ", pa = "
<< pa << endl;
return 0;
}
-
정수형 변수 'a' 와 포인터 변수 'pa'를 선언하였습니다. 'a'
에는 1 을 대입하고 'pa'
에는 변수 'a' 의 주소값을 대입하였습니다.
-
첫번째 출력문에서는 변수 'a' 를 이용해 'a' 에 대입되어 있는 값과 주소값을 출력하게 하였습니다. 두번째 출력문에서는 포인터 변수 'pa'를 이용해 'pa'가 가리키고 있는 곳에 저장된 값 ('*pa') 과 'pa' 에 저장된 값을 출력하도록 하였습니다.
-
실행을 시키면 'a' 와
'*pa' 의 값이 동일한 것을 확인해볼 수 있습니다.