Pages

Showing posts with label C언어 학습-4(포인터). Show all posts
Showing posts with label C언어 학습-4(포인터). Show all posts

Tuesday, March 27, 2018

C/C++ 언어 프로그래밍-포인터

C/C++ 언어 코딩 복습 - 포인터 (Pointer)

포인터 :

- 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' 값이 동일한 것을 확인해볼 있습니다.