목차

C++ 스터디 #9: 포인터(1)

시간 2021년 7월 6일 화요일 20:00 ~ 22:00
장소 ZOOM
참가자 -

1. 포인터

포인터는 주소를 가리키는 변수를 뜻합니다.
포인터는 다음과 같은 형식으로 선언됩니다.

자료형* 포인터변수이름;\\

Ex)
int* p;
double* p;
char* p;
short* p;

2. 주소 연산자 &

& 연산자를 이용하여 변수의 주소를 포인터에 저장할 수 있습니다.

p = &number;\\

위의 코드는 number라는 변수의 주소를 계산하여 포인터 p에 저장한다는 것을 의미합니다.
간단한 예제를 작성해 보면 다음과 같습니다.

int number = 10;  // 변수 정의
int* p;           // 포인터 정의

p = &number;      // 변수 number의 주소를 계산하여 포인터 p에 저장

3. 간접 참조 연산자 *

간접 참조 연산자 *를 통해 포인터가 가리키는 메모리 공간의 값을 읽어오거나 변경할 수 있습니다.
포인터 p가 가리키는 메모리 공간의 내용을 가져오려면 *p하면 됩니다. 이것을 포인터를 통하여 간접 참조한다고 합니다.

4. 이중 포인터

이중 포인터는 포인터의 포인터입니다. 즉 포인터의 메모리 주소를 저장하는 포인터를 의미합니다.
포인터를 선언할 때 *를 두 번 사용하면 이중 포인터를 선언하게 됩니다.
간단한 예제를 작성해 보면 다음과 같습니다.

#include <iostream>
using namespace std;

int main()
{
    int* numPtr1;      // 단일 포인터 선언
    int** numPtr2;     // 이중 포인터 선언
    int num1 = 10;
    
    numPtr1 = &num1;      // num1의 메모리 주소 저장
    
    numPtr2 = &numPtr1;   // numPtr1의 메모리 주소 저장
    
    cout << **numPtr2 << endl;    // 포인터를 두 번 역참조하여 num1의 메모리 주소를 출력
    
    return 0;
}

5. 예제

5.1

다음 소스 코드를 완성하여 10과 20이 각 줄에 출력되게 만드세요.


답안 예시

#include <iostream>
using namespace std;

int main()
{
	int* numPtr;
	int num1 = 10;
	int num2 = 20;

	numPtr = &num1;
	cout << *numPtr << endl;

	numPtr = &num2;
	cout << *numPtr << endl;

	return 0;
}

5.2

표준 입력으로 정수가 입력됩니다. 다음 소스 코드를 완성하여 입력된 정수가 출력되게 만드세요.

입력: 10
출력: 10


답안 예시

#include <iostream>
using namespace std;

int main()
{
	int* numPtr1;
	int** numPtr2;
	int num1;

	cin >> num1;

	numPtr1 = &num1;
	numPtr2 = &numPtr1;

	cout << **numPtr2 << endl;

	return 0;
}