포인터는 메모리 주소값을 저장하는 변수입니다.

즉, 일반적인 값인 아닌 메모리 값이 들어가야 합니다.

 

1. int n1 = 10;

2. int* n2 = 10;

1번과 2번 둘 다 성공적으로 실행이 될까요?

 

 

[사진 1] 결과

 

n2에서 오류가 나는 것을 볼 수 있습니다.

 

1번은 정수 n1의 값을 10으로 초기화 하는 코드입니다.

2번은 포인터에 주소값이 아닌 정수가 들어왔기 때문에 오류가 납니다. (int* n2 = n1도 같은 이유로 오류)

 

그럼 포인터는 어떻게 사용해야 할까요?

 

저희는 변수의 주소값을 가져올 때 &를 사용합니다.

&n1은 n1의 주소값을 나타냅니다.

 

[사진 2] &n1 출력 값

 

&n1을 출력했더니 저희가 알 수 없는 값이 나왔습니다.

이 값이 바로 n1의 주소값입니다.

 

컴퓨터는 변수를 선언할 때, 메모리 상으로 변수를 할당시켜 줍니다.

 

[사진 3]

 

[사진 3]은 컴퓨터가 n1을 메모리에 할당해준 것을 나타낸 것 입니다.

컴퓨터는 비어있는 메모리 중 주소값이 00AFF9B4인 공간에 n1 = 10을 넣어줬습니다.

그래서 &n1을 출력하면 00AFF9B4를 출력하게 되고, n1을 출력하면 10을 출력합니다.

 

이렇듯 컴퓨터는 변수를 선언해줄 때,

비어있는 메모리에 변수를 넣어주고, 우리는 그 메모리에 들어있는 값을 활용합니다.

 

포인터는 메모리 주소값을 저장하는 변수라고 했습니다.

즉, int* n2에서 n2의 값은 주소값이 들어가야 합니다.

 

위에 int* n2 = 10과 int* n2 = n1은 주소값이 아닌 정수값이 들어갔기 때문에 오류가 난 것입니다.

 

int* n2 = &n1; 하면 정상적으로 실행이 될까요?

네! 정상적으로 실행이 됩니다.

n2는 n1의 주소값을 저장하게 됩니다.

 

그래서 cout << n2;를 하게 되면 n1의 주소값 00AFF9B4을 출력합니다.

n1의 값을 출력하고 싶으면, cout << *n2;를 하면 n1의 값 10을 출력합니다.

그림으로 설명하면,

 

[사진 4]

 

int n1은 주소값이 00AFF9B4라는 메모리 공간에 저장되어 있고,

int* n2는 n1의 주소값 00AFF9B4를 가리키고 있습니다.

즉, n2를 출력하게 되면 n1의 주소값 00AFF9B4를 출력하게 됩니다.

이때, *n2를 출력하면, 주소값 00AFF9B4에 저장되어 있는 값인 n1 = 10이 출력됩니다.

 

그렇기 때문에 *n2 = -100;을 실행한다면, 주소값 00AFF9B4에 있는 값이 -100으로 바뀌는 것이기 때문에,

n1의 값이 -100으로 바뀌게 됩니다.

 


 

제가 공부한 부분을 정리한 내용이기 때문에 틀린 부분 있을 수 있습니다!!

혹시 틀린 부분이 있으면 알려주세요!!

'C++' 카테고리의 다른 글

[C++] map과 unordered_map이란?  (2) 2024.04.29
[C++] 미로게임 | 미로 생성 알고리즘-프림 알고리즘  (0) 2024.04.29
[C++] 미로게임  (0) 2023.04.13
[C++] 동적 바인딩  (0) 2023.04.02
[C++] 파일 입출력  (0) 2023.04.02

+ Recent posts