728x90
C++ 공부 중 포기하게 될 뻔한 두 번째 단계.
여러 강의도 찾아보고 책도 읽어가며 나름 열심히 정리했다.
그 중 가장 이해하기 쉬웠던 강의
https://www.youtube.com/watch?v=nQEvGgt1HZ8
-양주종의 코딩스쿨 중 "C언어 포인터 인강 ① 포인터 때문에 미쳐 버릴 것 같은 당신께 포인터는 넘어설 수 있습니다. 한 번에 이해하기 어렵다면 정상입니다. 반복해서 보시길 권합니다."
아직 완벽히 이해했다고 감히 말할 수는 없지만 그래도 처음 접했을 때보다는 많이 알게 되었다.
int a = 20;
int* p = &a;
이 선언과 동시에 아래의 메모리가 할당된다.
20 |
바로 위 그림은 a의 메모리를 그림으로 표현한 것이고 a의 시작 주소를 가리키는 것이 포인터이다.
a의 주소값을 쉽게 100번지라고 부르면,
a = 20
&a = 100번지
p = 100번지를 가리키게 된다.
*p = 20을 의미하는데, 이는 p에 저장된 주소로 찾아 들어가 값을 찾는다는 것을 의미한다.
쉽게 말해 a 는 int 자료형을 저장하고, p는 int* 자료형을 저장한다. int* 역시 자료형으로 보는 것이 이해하는데 더 도움이 되었다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
#include <iostream>
using namespace std;
int main() {
int a = 30;
int* p = &a;
cout << a << " " << &a << "\n";
// 30 a의 주소값
cout << *p << " " << p << " " << &p << "\n";
// 30 a의 주소값 p의 주소값
a = 40;
cout << a << " " << &a << "\n";
// 40 a의 주소값 (위의 주소값과 변화 X)
cout << *p << " " << p << " " << &p << "\n";
// 40 a의 주소값 p의 주소값 (위의 주소값과 변화 X)
*p = 50;
cout << a << " " << &a << "\n";
// 50 a의 주소값 (위의 주소값과 변화 X)
cout << *p << " " << p << " " << &p << "\n";
// 50 a의 주소값 p의 주소값 (위의 주소값과 변화 X)
int b = 100;
p = &b;
cout << b << " " << &b << "\n";
// 100 b의 주소값
cout << *p << " " << p << " " << &p << "\n";
// 100 b의 주소값 p의 주소값 (p의 주소값은 위의 주소값과 변화 X)
*p = 150;
cout << a << " " << &a << "\n";
// 50 a의 주소값 (위의 주소값과 변화 X)
cout << b << " " << &b << "\n";
// 150 b의 주소값 (위의 주소값과 변화 X)
cout << *p << " " << p << " " << &p << "\n";
// 150 b의 주소값 p의 주소값 (위의 주소값과 변화 X)
}
|
cs |
위의 결과 값 중 주소값은 변하지 않는 이유는 새로운 메모리를 할당하는 것이 아닌 해당 주소의 값만 변하기 때문이다.
'Study > Object-Oriented' 카테고리의 다른 글
문제 04 - 1 [정보 은닉과 const] (0) | 2022.06.22 |
---|---|
배열포인터 (0) | 2022.06.13 |
포인터배열 (0) | 2022.06.13 |