C++/ํฌ์ธํ„ฐ (Pointers)

์—ญ์ฐธ์กฐ (Dereferencing) ๋ชจ๋‘ ์•Œ๋‹ค์‹œํ”ผ ํฌ์ธํ„ฐ๋Š” ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Ÿ๊ฐ’์„ ์ €์žฅํ•ด๋†“๋Š” ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋„ ์ฃผ์†Œ๋ฅผ ํ†ตํ•ด์„œ ์›ํ•˜๋Š” ์œ„์น˜์— ๋ฐฉ๋ฌธํ•ฉ๋‹ˆ๋‹ค. C++์—์„œ๋„ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๋‹น์—ฐํžˆ ํฌ์ธํ„ฐ์˜ ๊ฐ’์œผ๋กœ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ๋ฅผ ์•ˆ๋‹ค๋ฉด, ๊ทธ ์ฃผ์†Œ๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์œ„์น˜์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜๋„ ์žˆ๊ฒ ์ฃ ? ์ด๊ฒƒ์„ ์šฐ๋ฆฌ๋Š” ์—ญ์ฐธ์กฐ (Dereferencing) ๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋ฐฉ๋ฒ•์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ํฌ์ธํ„ฐ๋ฅผ ์„ ์–ธํ•  ๋•Œ, ๋ณ€์ˆ˜์™€ ๋‹ค๋ฅธ ๋ถ€๋ถ„์ด ์–ด๋–ค ๊ฒƒ์ด์˜€๋Š”์ง€ ๊ธฐ์–ต์ด ๋‚˜์‹œ๋‚˜์š”? ๋ณ€์ˆ˜์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ํฌ์ธํ„ฐ์˜ ์ด๋ฆ„ ์•ž์— asterisk(*) ๋งˆํฌ๋ฅผ ๋ถ™์˜€์Šต๋‹ˆ๋‹ค. ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฅดํ‚ค๋Š” ๊ฐ’(์ฃผ์†Œ)๋ฅผ ๋”ฐ๋ผ๊ฐ€์„œ ์žˆ๋Š” ์œ„์น˜์— ์ €์žฅ๋œ ๊ฐ’์„ ์กฐํšŒํ•  ๋•Œ๋„ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๋ณ€์ˆ˜๋ช… ์•ž์— *๋ฅผ ๋ถ™์ด๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์„ ์–ธํ•  ๋•Œ์™€ ๋™์ผํ•œ synta..
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๋ฅผ ๊ฐ€๋ฅดํ‚ค๋Š” ๋‹ค๋ฅธ ํฌ์ธํ„ฐ๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด, ํฌ์ธํ„ฐ๋Š” ์™œ ์‚ฌ์šฉํ• ๊นŒ์š”? ํฌ์ธํ„ฐ๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๋ณ€์ˆ˜๋ฅผ ๊ฐ€๋ฅดํ‚ค๋Š” ๋ณ€์ˆ˜๋ผ๋ฉด, ๊ทธ๋ƒฅ ์›๋ž˜์˜ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋Š”๊ฑฐ ์•„๋‹๊นŒ์š”? ํฌ์ธํ„ฐ ์‚ฌ์šฉ์˜ ์ด์œ  ์œ„์˜ ์งˆ๋ฌธ์„ ์ด์–ด์„œ ์ด์œ ๋ฅผ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋งž์Šต๋‹ˆ๋‹ค. ์›๋ž˜์˜ ๋ณ€์ˆ˜๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์šฐ๋ฆฌ๋Š” ์ข…์ข… ํ”„๋กœ๊ทธ๋žจ ์†์—์„œ ๋ณต์žกํ•œ ๊ตฌ์กฐ๋กœ ..
Chan Lee
'C++/ํฌ์ธํ„ฐ (Pointers)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (2 Page)