์ญ์ฐธ์กฐ (Dereferencing) ๋ชจ๋ ์๋ค์ํผ ํฌ์ธํฐ๋ ๋ค๋ฅธ ๋ฐ์ดํฐ์ ์ฃผ์๊ฐ์ ์ ์ฅํด๋๋ ๋ณ์์
๋๋ค. ์ฐ๋ฆฌ๋ ์ฃผ์๋ฅผ ํตํด์ ์ํ๋ ์์น์ ๋ฐฉ๋ฌธํฉ๋๋ค. C++์์๋ ๋์ผํฉ๋๋ค. ๋น์ฐํ ํฌ์ธํฐ์ ๊ฐ์ผ๋ก ์ํ๋ ๋ฐ์ดํฐ์ ์ฃผ์๋ฅผ ์๋ค๋ฉด, ๊ทธ ์ฃผ์๋ฅผ ํตํด ํด๋น ์์น์ ์๋ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์๋ ์๊ฒ ์ฃ ? ์ด๊ฒ์ ์ฐ๋ฆฌ๋ ์ญ์ฐธ์กฐ (Dereferencing) ๋ผ๊ณ ๋ถ๋ฆ
๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ฐฉ๋ฒ์ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค. ํฌ์ธํฐ๋ฅผ ์ ์ธํ ๋, ๋ณ์์ ๋ค๋ฅธ ๋ถ๋ถ์ด ์ด๋ค ๊ฒ์ด์๋์ง ๊ธฐ์ต์ด ๋์๋์? ๋ณ์์๋ ๋ค๋ฅด๊ฒ ํฌ์ธํฐ์ ์ด๋ฆ ์์ asterisk(*) ๋งํฌ๋ฅผ ๋ถ์์ต๋๋ค. ํฌ์ธํฐ๊ฐ ๊ฐ๋ฅดํค๋ ๊ฐ(์ฃผ์)๋ฅผ ๋ฐ๋ผ๊ฐ์ ์๋ ์์น์ ์ ์ฅ๋ ๊ฐ์ ์กฐํํ ๋๋ ๋์ผํฉ๋๋ค. ๋ณ์๋ช
์์ *๋ฅผ ๋ถ์ด๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ์ ์ธํ ๋์ ๋์ผํ synta..
C++/ํฌ์ธํฐ (Pointers)
C++์์๋ & ๊ธฐํธ๋ฅผ ํตํด ๋ฐ์ดํฐ์ ์ฃผ์์ ์ ๊ทผํ ์ ์์ต๋๋ค. ๊ฐ์ 16์ง์ ์ซ์๋ก ๋ฐํ๋ฉ๋๋ค. ์์๋ฅผ ๋ณด์ฌ๋๋ฆฌ๊ฒ ์ต๋๋ค. #include using namespace std; int main() { int num{10}; cout
ํฌ์ธํฐ์ ์ ์ธ์ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ก ์งํ๋ฉ๋๋ค. variable_type *pointer_name; asterisk(*)๋ง ์์ด์ง๋ฉด ๋ณ์์ ๋์ผํฉ๋๋ค. ์์ int *int_ptr; double *double_ptr; char *char_ptr; string *string_ptr; ํ์ง๋ง, ์ค์ํ ๊ฒ์ ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํ๋ฅผ ํด ์ฃผ์ด์ผ ํฉ๋๋ค. ์ด๊ธฐํ๋ฅผ ํ์ง ์์ผ๋ฉด ํฌ์ธํฐ์ ์ฐ๋ ๊ธฐ ์ฃผ์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์๊ฒ ๋ฉ๋๋ค. ์ด๊ธฐํ๊น์ง ํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ฉ๋๋ค. variable_type *pointer_name {nullptr}; ์์ int *int_ptr {}; double *double_ptr {nullptr}; char *char_ptr {nullptr}; string *string_ptr {nullptr};
Pointer Pointer๋ ๋ณ์์
๋๋ค. ๋ณ์์ ๊ตฌ์ฑ ์์๋ ๋ฉ๋ชจ๋ฆฌ์ ์์น, ๋ณ์ ํ์
, ๊ทธ๋ฆฌ๊ณ ๊ฐ์ ๊ฐ์ง๋๋ค. ํฌ์ธํฐ๋ ๋ค๋ฅธ ๋ณ์๋ ํจ์์ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ๋ณ์์
๋๋ค. ์ด๊ฒ ๋ฌด์จ ๋ป์ด๋๋ฉด, ๋ณ์์ '๊ฐ' ์ ํด๋นํ๋ ๋ถ๋ถ์ด ๋ค๋ฅธ ๋์์ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๋ผ๋ ๊ฒ ์
๋๋ค. ์๋ฅผ ๋ค์ด int x {10}; ์ผ๋ก ์ ์ ๋ณ์ x๋ฅผ ์ ์ธํ๊ณ 10์ ํ ๋นํ๋ค๋ฉด, ๋ณ์ x๋ฅผ ๊ฐ๋ฅดํค๋ ๋ค๋ฅธ ํฌ์ธํฐ๋ฅผ ์ ์ธํ ์ ์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด, ํฌ์ธํฐ๋ ์ ์ฌ์ฉํ ๊น์? ํฌ์ธํฐ๊ฐ ์ด๋ฏธ ์กด์ฌํ๋ ๋ณ์๋ฅผ ๊ฐ๋ฅดํค๋ ๋ณ์๋ผ๋ฉด, ๊ทธ๋ฅ ์๋์ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋๊ฑฐ ์๋๊น์? ํฌ์ธํฐ ์ฌ์ฉ์ ์ด์ ์์ ์ง๋ฌธ์ ์ด์ด์ ์ด์ ๋ฅผ ์ค๋ช
ํ๊ฒ ์ต๋๋ค. ๋ง์ต๋๋ค. ์๋์ ๋ณ์๋ฅผ ์ง์ ์ฌ์ฉํ๋ฉด ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ํ์ง๋ง, ์ฐ๋ฆฌ๋ ์ข
์ข
ํ๋ก๊ทธ๋จ ์์์ ๋ณต์กํ ๊ตฌ์กฐ๋ก ..