C++์์ ํฌ์ธํฐ์ ๋ ํผ๋ฐ์ค๋ ๋ชจ๋ ๋ณ์๋ฅผ ๊ฐ๋ฆฌํค๊ฑฐ๋ ์ฐธ์กฐํ๋๋ฐ ์ฌ์ฉ๋์ง๋ง, ๊ทธ๋ค ๊ฐ์ ์ค์ํ ์ฐจ์ด์ ์ด ์์ต๋๋ค.
์ ์
- ํฌ์ธํฐ(Pointer): ํฌ์ธํฐ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ๋ณ์์
๋๋ค. ๋ณ์์ ์ฃผ์๋ฅผ ์ ์ฅํ๊ณ ํด๋น ๋ณ์์ ๋ํ ๊ฐ์ ์ฐธ์กฐ๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์กฐ์ํ ์ ์์ต๋๋ค. ํฌ์ธํฐ๋ '*' ๊ธฐํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธํ๋ฉฐ, ํ ๋น๋ ์ฃผ์๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
- ๋ ํผ๋ฐ์ค(Reference): ๋ ํผ๋ฐ์ค๋ ๊ธฐ์กด ๋ณ์์ ๋ณ์นญ(alias)์
๋๋ค. ์ฆ, ๊ธฐ์กด ๋ณ์์ ๋ํ ๋ณ์นญ์ ๋ง๋ค์ด ํด๋น ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์๋๋ก ํฉ๋๋ค. ๋ ํผ๋ฐ์ค๋ '&' ๊ธฐํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธ๋๋ฉฐ, ํ ๋ฒ ํ ๋น๋๋ฉด ๋ค๋ฅธ ๋ณ์๋ก ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค.
์ด๊ธฐํ
- ํฌ์ธํฐ(Pointer): ํฌ์ธํฐ๋ ์ด๊ธฐํํ์ง ์๊ฑฐ๋ ๋ ํฌ์ธํฐ๋ก ์ด๊ธฐํํ ์ ์์ต๋๋ค. ๋ ํฌ์ธํฐ๋ ์ด๋ค ์ฃผ์๋ ๊ฐ๋ฆฌํค์ง ์๋ ํน๋ณํ ๊ฐ์ ๋ํ๋
๋๋ค.
int num = 10;
int* ptr = # // ํฌ์ธํฐ๋ num ๋ณ์์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
int* nullPtr = nullptr; // ๋ ํฌ์ธํฐ๋ก ์ด๊ธฐํ
- ๋ ํผ๋ฐ์ค(Reference): ๋ ํผ๋ฐ์ค๋ ์ ์ธ๊ณผ ๋์์ ๋ฐ๋์ ๊ธฐ์กด ๋ณ์๋ก ์ด๊ธฐํํด์ผ ํฉ๋๋ค. ์๋ก์ด ๋ณ์๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
int num = 10;
int& ref = num; // ๋ ํผ๋ฐ์ค๋ num ๋ณ์๋ฅผ ์ฐธ์กฐํฉ๋๋ค.
์ฌ์ฉ๋ฒ
- ํฌ์ธํฐ(Pointer): ํฌ์ธํฐ๋ ๊ฐ์ ์ฐธ์กฐ ์ฐ์ฐ์ '*'๋ฅผ ์ฌ์ฉํ์ฌ ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๋ณ์์ ๊ฐ์ ์ฝ๊ฑฐ๋ ์์ ํฉ๋๋ค.
int num = 10;
int* ptr = #
*ptr = 20; // ptr์ด ๊ฐ๋ฆฌํค๋ ๋ณ์์ ๊ฐ์ 20์ผ๋ก ๋ณ๊ฒฝ (num์ ์ด์ 20)
- ๋ ํผ๋ฐ์ค(Reference): ๋ ํผ๋ฐ์ค๋ ๋ณ๋์ ์ฐธ์กฐ ์ฐ์ฐ์๊ฐ ํ์ํ์ง ์์ต๋๋ค. ๋จ์ํ ๋ ํผ๋ฐ์ค๋ฅผ ํตํด ๊ธฐ์กด ๋ณ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
int num = 10;
int& ref = num;
ref = 20; // ref๋ฅผ ํตํด num ๋ณ์์ ๊ฐ์ 20์ผ๋ก ๋ณ๊ฒฝ (num์ ์ด์ 20)
๋ ๊ฐ(Null Value)
- ํฌ์ธํฐ(Pointer): ํฌ์ธํฐ๋ ๋ ํฌ์ธํฐ๋ก ์ด๊ธฐํํ์ฌ ์ด๋ค ์ฃผ์๋ ๊ฐ๋ฆฌํค์ง ์๋ ์ํ๋ฅผ ํํํ ์ ์์ต๋๋ค.
int* ptr = nullptr; // ํฌ์ธํฐ๋ ์๋ฌด๊ฒ๋ ๊ฐ๋ฆฌํค์ง ์๋ ๋ ํฌ์ธํฐ์
๋๋ค.
- ๋ ํผ๋ฐ์ค(Reference): ๋ ํผ๋ฐ์ค๋ ๋ฐ๋์ ์ด๊ธฐํํด์ผ ํ๋ฉฐ, ๋ ๊ฐ์ผ๋ก ์ด๊ธฐํํ ์ ์์ต๋๋ค. ์ฆ, ํญ์ ์ ํจํ ๋ณ์๋ฅผ ์ฐธ์กฐํด์ผ ํฉ๋๋ค.
Null ์ฒดํฌ
- ํฌ์ธํฐ(Pointer): ๋ ํฌ์ธํฐ์ธ์ง ํ์ธํ์ฌ ์์ ํ ์ ๊ทผ์ ๋ณด์ฅํด์ผ ํฉ๋๋ค.
int* ptr = nullptr;
if (ptr != nullptr) {
// ptr์ด ์ ํจํ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์์ ๋์ ์ฝ๋
}
- ๋ ํผ๋ฐ์ค(Reference): ๋ ํผ๋ฐ์ค๋ ์ ์ธ๊ณผ ๋์์ ๋ฐ๋์ ์ด๊ธฐํ๋๋ฏ๋ก ๋ ์ฒดํฌ๋ฅผ ํ ํ์๊ฐ ์์ต๋๋ค.
ํฌ์ธํฐ์ ๋ ํผ๋ฐ์ค ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ํ์ฉํ ์ ์๋๋ก ํด์ฃผ๋ ์ค์ํ ๋๊ตฌ์
๋๋ค. ํฌ์ธํฐ๋ ํนํ ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ํจ์ ๋งค๊ฐ๋ณ์ ์ ๋ฌ์ ์ ์ฉํ๋ฉฐ, ๋ ํผ๋ฐ์ค๋ ์ฝ๋ ๊ฐ๋
์ฑ๊ณผ ์์ ์ฑ์ ํฅ์์ํค๋ ๋ฐ ๋์์ ์ค๋๋ค. ๋ฐ๋ผ์ ์ํฉ์ ๋ฐ๋ผ ํฌ์ธํฐ์ ๋ ํผ๋ฐ์ค๋ฅผ ์ ์ ํ๊ฒ ์ฌ์ฉํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
'C++ ์์ฉ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[std] iterator๋ณด๋จ const_iterator ! (0) | 2023.01.14 |
---|---|
๊ฐ์ฒด ์์ฑ์ ์๊ดํธ์ ์ค๊ดํธ ์ฐจ์ด (0) | 2023.01.14 |
์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ํ ๊ฟํ! (0) | 2022.12.30 |
[C/C++] unsigned์ signed์ ๊ฐ ๋น๊ต ์ฃผ์ (0) | 2022.03.23 |
[c++] ๋๋ค ํํ์ ์ ๋ฆฌ (0) | 2021.03.09 |
๋๊ธ