본문 바로가기
Software/C++

[C++ 기초] 11. 포인터 기초

by 리미와감자 2023. 3. 20.

포인터(Pointer)

 

정의

변수의 주소를 저장하는 변수

 

선언

 int *a; // c style
 int* b; // c++ style
 int* c, d; // c는 포인터 변수, d는 int형 변수

 

특징

간접값 연산자 또는 간접 참조 연산자 * 를 붙여서 값에 접근할 수 있다.

 

 

Code

#include <iostream>

using namespace std;

int main() {

    int a = 6;
    int* b;

    b = &a; // a의 주소

    cout << "a의 값" << a << endl;
    cout << "*b의 값" << *b << endl; // 간접 참조 연산자 *

    cout << "a의 주소 " << &a << endl;
    cout << "*b의 주소 " << b << endl;

    *b = *b + 1; // 값을 바꿀 수 있다.

    cout << "이제 a의 값은 " << a << endl;




    return 0;
}

 

결과

더보기

a의 값6
*b의 값6
a의 주소 00000090344FFB04
*b의 주소 00000090344FFB04
이제 a의 값은 7

 

C++에서 포인터를 사용하는 이유?

C++ : 객체지향 프로그래밍의 특징 중 하나

컴파일 시간이 아닌 실행 시간에 어떠한 결정을 내릴 수 있다.

 

- 배열 생성
절차적 프로그래밍 : 배열의 크기가 미리 결정
객체지향 프로그래밍 : 배열의 크기가 실행 시간에 결정

 

예를 들어,


일주일에 6일은 크기가 20인 배열, 일주일에 1일은 200인 배열을 관리해야한다고 가정하면,

절차적 프로그래밍에서는 일주일에 한 번의 경우 때문에 배열의 크기가 200인 배열을 생성해야한다. 따라서 180개의 메모리가 낭비가 된다.

객체지향 프로그래밍에서는 실행 시간에 배열의 크기가 결정되기 때문에 메모리 낭비가 없다.

댓글