๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ Development Study/๐Ÿ‘จ๐Ÿพ‍๐Ÿ’ป C++

ํฌ์ธํ„ฐ

by eazuooz 2022. 8. 19.

์ด์ „ ์žฅ์—์„œ ๋ณ€์ˆ˜๋Š” ์‹๋ณ„์ž(์ด๋ฆ„)๋กœ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” ์ปดํ“จํ„ฐ ๋ฉ”๋ชจ๋ฆฌ์˜ ์œ„์น˜๋กœ ์„ค๋ช…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์‹์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์€ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ๋ฌผ๋ฆฌ์  ์ฃผ์†Œ์— ๋Œ€ํ•ด ์‹ ๊ฒฝ ์“ธ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•ด์•ผ ํ•  ๋•Œ๋งˆ๋‹ค ๋‹จ์ˆœํžˆ ์‹๋ณ„์ž๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

C++ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฒฝ์šฐ ์ปดํ“จํ„ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ๋Š” ํฌ๊ธฐ๊ฐ€ 1๋ฐ”์ดํŠธ์ด๊ณ  ๊ฐ๊ฐ โ€‹โ€‹๊ณ ์œ ํ•œ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง„ ์ผ๋ จ์˜ ๋ฉ”๋ชจ๋ฆฌ ์…€๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋‹จ์ผ ๋ฐ”์ดํŠธ ๋ฉ”๋ชจ๋ฆฌ ์…€์€ 1๋ฐ”์ดํŠธ๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ ํ‘œํ˜„์ด ์—ฐ์†์ ์ธ ์ฃผ์†Œ๋ฅผ ๊ฐ–๋Š” ๋ฉ”๋ชจ๋ฆฌ ์…€์„ ์ ์œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ฐ ์…€์€ ๊ณ ์œ ํ•œ ์ฃผ์†Œ๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ฃผ์†Œ๊ฐ€ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์…€์€ 1776ํ•ญ์ƒ ์ฃผ์†Œ๊ฐ€ ์žˆ๋Š” ์…€ ๋ฐ”๋กœ ๋‹ค์Œ์— ์˜ต๋‹ˆ๋‹ค.1775๋ฐ ๊ฐ€ ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค ์•ž์— 1777์˜ค๊ณ  ๋Š” ๋’ค์— ์ •ํ™•ํžˆ 1,000๊ฐœ์˜ ์…€์ด ์žˆ๊ณ  ์ด์ „์—๋Š” ์ •ํ™•ํžˆ 7761,000๊ฐœ์˜ ์…€ ์ด 2776์žˆ์Šต๋‹ˆ๋‹ค.

๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋˜๋ฉด ๊ทธ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ์— ๋ฉ”๋ชจ๋ฆฌ์˜ ํŠน์ • ์œ„์น˜(๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ)๊ฐ€ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ C++ ํ”„๋กœ๊ทธ๋žจ์€ ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ์ •ํ™•ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋Šฅ๋™์ ์œผ๋กœ ๊ฒฐ์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹คํ–‰ํžˆ๋„ ๊ทธ ์ž‘์—…์€ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ํ™˜๊ฒฝ์— ๋งก๊ฒจ์ง‘๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋Ÿฐํƒ€์ž„ ์‹œ ํŠน์ • ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์šด์˜ ์ฒด์ œ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ”„๋กœ๊ทธ๋žจ์ด ํŠน์ • ์œ„์น˜์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์…€์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•ด ๋Ÿฐํƒ€์ž„ ์ค‘์— ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ฃผ์†Œ ์—ฐ์‚ฐ์ž(&)

๋ณ€์ˆ˜์˜ ์ฃผ์†Œ๋Š” ๋ณ€์ˆ˜ ์ด๋ฆ„ ์•ž์— ์•ฐํผ์ƒŒ๋“œ ๊ธฐํ˜ธ( &)๋ฅผ ๋ถ™์—ฌ์„œ ์–ป์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ์ฃผ์†Œ ์—ฐ์‚ฐ์ž๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

foo = &myvar;

์ด๊ฒƒ์€ ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ myvar๋ฅผ foo; ๋ณ€์ˆ˜ ์ด๋ฆ„ ์•ž์— ์ฃผ์†Œ ์—ฐ์‚ฐ์ž ( )๋ฅผ ๋ถ™์ž„์œผ๋กœ์จ ๋” ์ด์ƒ ๋ณ€์ˆ˜ ์ž์ฒด์˜ ๋‚ด์šฉ์„ ์— ํ• ๋‹นํ•˜์ง€ ์•Š๊ณ  ์ฃผ์†Œ myvar๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค . ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ๋ณ€์ˆ˜์˜ ์‹ค์ œ ์ฃผ์†Œ๋Š” ๋Ÿฐํƒ€์ž„ ์ „์— ์•Œ ์ˆ˜ ์—†์ง€๋งŒ ์ผ๋ถ€ ๊ฐœ๋…์„ ๋ช…ํ™•ํžˆ ํ•˜๊ธฐ ์œ„ํ•ด ๋Ÿฐํƒ€์ž„ ์ค‘์— ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์— ๋ฐฐ์น˜ ๋œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค . ์ด ๊ฒฝ์šฐ ๋‹ค์Œ ์ฝ”๋“œ ์กฐ๊ฐ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.&foo

 

myvar = 25;
foo = &myvar;
bar = myvar;

์ด๋ฅผ ์‹คํ–‰ํ•œ ํ›„ ๊ฐ ๋ณ€์ˆ˜์— ํฌํ•จ๋œ ๊ฐ’์€ ๋‹ค์Œ ๋‹ค์ด์–ด๊ทธ๋žจ์— ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค.



๋จผ์ € ๊ฐ’ 25์„ myvar(๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ๊ฐ€ ๋ผ๊ณ  ๊ฐ€์ •ํ•œ ๋ณ€์ˆ˜) ์— ํ• ๋‹นํ–ˆ์Šต๋‹ˆ๋‹ค 1776. ๋‘ ๋ฒˆ์งธ ๋ช…๋ น๋ฌธ ์€ ์˜ ์ฃผ์†Œ๋ฅผ

ํ• ๋‹น ํ•ฉ๋‹ˆ๋‹ค . ๋งˆ์ง€๋ง‰์œผ๋กœ ์„ธ ๋ฒˆ์งธ ๋ช…๋ น๋ฌธ์€ ์— ํฌํ•จ๋œ ๊ฐ’์„ ์— ํ• ๋‹น ํ•ฉ๋‹ˆ๋‹ค . ์ด๊ฒƒ์€ ์ด์ „ ์žฅ์—์„œ ์ด๋ฏธ ์—ฌ๋Ÿฌ ๋ฒˆ ์ˆ˜ํ–‰๋œ ํ‘œ์ค€ ํ• ๋‹น ์ž‘์—…์ž…๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ๋ฌธ์žฅ๊ณผ ์„ธ ๋ฒˆ์งธ ๋ฌธ์žฅ์˜ ์ฃผ์š” ์ฐจ์ด์ ์€ ์ฃผ์†Œ ์—ฐ์‚ฐ์ž ( )์˜ ๋ชจ์–‘์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜

 

foo์ด์ „ ์˜ˆ์—์„œ)๋Š” C++์—์„œ ํฌ์ธํ„ฐ ๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค. ํฌ์ธํ„ฐ๋Š” ์ €์ˆ˜์ค€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์–ธ์–ด์˜ ๋งค์šฐ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ž ์‹œ ํ›„์— ํฌ์ธํ„ฐ๋ฅผ ์„ ์–ธํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์—ญ์ฐธ์กฐ ์—ฐ์‚ฐ์ž(*)

๋ฐฉ๊ธˆ ๋ณด์•˜๋“ฏ์ด ๋‹ค๋ฅธ ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜๋ฅผ ํฌ์ธํ„ฐ ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค . ํฌ์ธํ„ฐ๋Š” ์ฃผ์†Œ๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ณ€์ˆ˜๋ฅผ "๊ฐ€๋ฆฌํ‚ค๋Š”" ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํฌ์ธํ„ฐ์˜ ํฅ๋ฏธ๋กœ์šด ์†์„ฑ์€ ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ณ€์ˆ˜์— ์ง์ ‘ ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํฌ์ธํ„ฐ ์ด๋ฆ„ ์•ž์— ์—ญ์ฐธ์กฐ ์—ฐ์‚ฐ์ž ( *)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์—ฐ์‚ฐ์ž ์ž์ฒด๋Š” "๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’"์œผ๋กœ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ด์ „ ์˜ˆ์˜ ๊ฐ’์— ๋”ฐ๋ผ ๋‹ค์Œ ๋ช…๋ น๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

baz = *foo;

baz์ด๊ฒƒ์€ " ์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’๊ณผ ๊ฐ™์Œ "์œผ๋กœ ์ฝ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ foo๋ช…๋ น๋ฌธ์€ ์‹ค์ œ๋กœ ๊ฐ’ 25์„ baz์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด foois ์ด๊ณ  (์œ„์˜ ์˜ˆ 1776์— ๋”ฐ๋ผ) ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์€ ์ž…๋‹ˆ๋‹ค. ๊ฐ€ ๊ฐ’ ์„ ์ฐธ์กฐํ•˜๋Š” ๋ฐ˜๋ฉด (์‹๋ณ„์ž ์•ž์— ๋ณ„ํ‘œ ๊ฐ€ ์žˆ์Œ) ์€ address ์— ์ €์žฅ๋œ ๊ฐ’์„ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ด ๊ฒฝ์šฐ์—๋Š” ์ž„์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ณ„ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค . ์—ญ์ฐธ์กฐ ์—ฐ์‚ฐ์ž ๋ฅผ ํฌํ•จํ•˜๊ฑฐ๋‚˜ ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์˜ ์ฐจ์ด์ ์— ์ฃผ๋ชฉํ•˜์„ธ์š” (์ด ๋‘ ํ‘œํ˜„์‹ ๊ฐ๊ฐ์„ ์ฝ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค).177625


foo1776*foo*177625

   



๋”ฐ๋ผ์„œ ์ฐธ์กฐ ๋ฐ ์—ญ์ฐธ์กฐ ์—ฐ์‚ฐ์ž๋Š” ์ƒํ˜ธ ๋ณด์™„์ ์ž…๋‹ˆ๋‹ค.

  • &๋Š” ์ฃผ์†Œ ์—ฐ์‚ฐ์ž ์ด๋ฉฐ ๊ฐ„๋‹จํžˆ "~์˜ ์ฃผ์†Œ"๋กœ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • *์—ญ ์ฐธ์กฐ ์—ฐ์‚ฐ์ž ์ด๋ฉฐ "๋‹ค์Œ์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’"์œผ๋กœ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๋”ฐ๋ผ์„œ ๊ทธ๊ฒƒ๋“ค์€ ์„œ๋กœ ๋ฐ˜๋Œ€๋˜๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค. ๋กœ ์–ป์€ ์ฃผ์†Œ &๋Š” ๋กœ ์—ญ์ฐธ์กฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค *.

์ด์ „์— ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ํ• ๋‹น ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

myvar = 25;
foo = &myvar;

์ด ๋‘ ๋ฌธ์žฅ ๋ฐ”๋กœ ๋’ค์— ๋‹ค์Œ ์‹์€ ๋ชจ๋‘ true๋ฅผ ๊ฒฐ๊ณผ๋กœ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

myvar == 25
&myvar == 1776
foo == 1776
*foo == 25

์— ์ˆ˜ํ–‰๋œ ํ• ๋‹น ์ž‘์—…์„ ๊ณ ๋ คํ•˜๋ฉด ์ฒซ ๋ฒˆ์งธ ํ‘œํ˜„์‹์€ ๋งค์šฐ ๋ช…ํ™• myvarํ•ฉ๋‹ˆ๋‹ค myvar=25. ๋‘ ๋ฒˆ์งธ๋Š” ์˜ ์ฃผ์†Œ &๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ฃผ์†Œ ์—ฐ์‚ฐ์ž( )๋ฅผ ์‚ฌ์šฉ myvarํ•ฉ๋‹ˆ๋‹ค 1776. ๋‘ ๋ฒˆ์งธ ํ‘œํ˜„์‹์ด true์ด๊ณ  ์— ๋Œ€ํ•ด ์ˆ˜ํ–‰๋œ ํ• ๋‹น ์ž‘์—…์ด ์˜€๊ธฐ ๋•Œ๋ฌธ์— ์„ธ ๋ฒˆ์งธ ํ‘œํ˜„์‹์€ ๋‹ค์†Œ ๋ถ„๋ช… fooํ•ฉ๋‹ˆ๋‹ค foo=&myvar. ๋„ค ๋ฒˆ์งธ ํ‘œํ˜„์‹์€ "๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’"์œผ๋กœ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์—ญ์ฐธ์กฐ ์—ฐ์‚ฐ์ž ( )๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’ ์€ ์‹ค์ œ๋กœ ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฃผ์†Œ ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” ํ•œ ๋‹ค์Œ ํ‘œํ˜„์‹๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž„์„ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

*foo == myvar

ํฌ์ธํ„ฐ ์„ ์–ธ

ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์„ ์ง์ ‘ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์œผ๋กœ ์ธํ•ด ํฌ์ธํ„ฐ๋Š” ๋˜๋Š” a char๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ๋•Œ์™€ ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ฌ ๋•Œ ๋‹ค๋ฅธ ์†์„ฑ์„ ๊ฐ–์Šต๋‹ˆ๋‹ค . ์—ญ์ฐธ์กฐ๋˜๋ฉด ์œ ํ˜•์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ ์œ„ํ•ด ํฌ์ธํ„ฐ ์„ ์–ธ์—๋Š” ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ์ดํ„ฐ ์œ ํ˜•์ด ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํฌ์ธํ„ฐ ์„ ์–ธ์€ ๋‹ค์Œ ๊ตฌ๋ฌธ์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ์ดํ„ฐ ์œ ํ˜•์ž…๋‹ˆ๋‹ค. ์ด ์œ ํ˜•์€ ํฌ์ธํ„ฐ ์ž์ฒด์˜ ์œ ํ˜•์ด ์•„๋‹ˆ๋ผ ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ์ดํ„ฐ ์œ ํ˜•์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

int * number;
char * character;
double * decimals;

๋‹ค์Œ์€ ์„ธ ๊ฐ€์ง€ ํฌ์ธํ„ฐ ์„ ์–ธ์ž…๋‹ˆ๋‹ค. ๊ฐ๊ฐ์€ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ๋˜์–ด ์žˆ์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ๋ชจ๋‘ ํฌ์ธํ„ฐ์ด๊ณ  ๋ชจ๋‘ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋™์ผํ•œ ์–‘์˜ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค(ํฌ์ธํ„ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋Š” ํ”Œ๋žซํผ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๊ณณ). ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๊ทธ๋“ค์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ์ดํ„ฐ๋Š” ๋™์ผํ•œ ์–‘์˜ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋™์ผํ•œ ์œ ํ˜•๋„ ์•„๋‹™๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋Š” a , int๋‘ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋Š” a char, ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ๋Š” a ๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค double. ๋”ฐ๋ผ์„œ ์ด ์„ธ ๊ฐ€์ง€ ์˜ˆ์ œ ๋ณ€์ˆ˜๋Š” ๋ชจ๋‘ ํฌ์ธํ„ฐ์ด์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ๊ฐ€๋ฆฌํ‚ค๋Š” ์œ ํ˜• ์— ๋”ฐ๋ผ ๊ฐ๊ฐ , , ๋ฐ ๊ฐ๊ฐ int*๋‹ค๋ฅธ char*์œ ํ˜• ์„ ๊ฐ–์Šต๋‹ˆ๋‹ค. ๋ณ„ํ‘œ(double*

*) ํฌ์ธํ„ฐ๋ฅผ ์„ ์–ธํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ํฌ์ธํ„ฐ๋Š” ํฌ์ธํ„ฐ(์œ ํ˜• ๋ณตํ•ฉ ์ง€์ •์ž์˜ ์ผ๋ถ€์ž„)์ž„์„ ์˜๋ฏธํ•  ๋ฟ์ด๋ฉฐ , ์กฐ๊ธˆ ์•ž์„œ ๋ณธ ์—ญ์ฐธ์กฐ ์—ฐ์‚ฐ์ž ์™€ ํ˜ผ๋™ํ•ด์„œ๋Š” ์•ˆ ๋˜์ง€๋งŒ ๋ณ„ํ‘œ( *)๋กœ ์ž‘์„ฑ๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์€ ๋‹จ์ˆœํžˆ ๊ฐ™์€ ๊ธฐํ˜ธ๋กœ ํ‘œํ˜„๋˜๋Š” ๋‘ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํฌ์ธํ„ฐ์— ๋Œ€ํ•œ ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

// my first pointer
#include <iostream>
using namespace std;

int main ()
{
  int firstvalue, secondvalue;
  int * mypointer;

  mypointer = &firstvalue;
  *mypointer = 10;
  mypointer = &secondvalue;
  *mypointer = 20;
  cout << "firstvalue is " << firstvalue << '\n';
  cout << "secondvalue is " << secondvalue << '\n';
  return 0;
}
์ฒซ ๋ฒˆ์งธ ๊ฐ’์€ 10์ž…๋‹ˆ๋‹ค.
๋‘ ๋ฒˆ์งธ ๊ฐ’์€ 20์ž…๋‹ˆ๋‹ค.

๋‘˜ ๋‹ค ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ง์ ‘์ ์œผ๋กœ ๊ฐ’์„ ์„ค์ •ํ•˜์ง€ ์•Š๋”๋ผ๋„ ๋‘˜ ๋‹ค ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„์ ‘์ ์œผ๋กœ ๊ฐ’์„ ์„ค์ • firstvalueํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค . ์ด๊ฒƒ์ด ๋ฐœ์ƒํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋จผ์ € ์ฃผ์†Œ ์—ฐ์‚ฐ์ž( )๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒซ ๋ฒˆ์งธ ๊ฐ’์˜ ์ฃผ์†Œ๊ฐ€ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค . ๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์— ์˜ ๊ฐ’์ด ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค . ์ด ์ˆœ๊ฐ„ ๊ฐ€ ์˜ ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ ์˜ ๊ฐ’์ด ์ˆ˜์ • ๋ฉ๋‹ˆ๋‹ค. ํฌ์ธํ„ฐ๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ˆ˜๋ช… ๋™์•ˆ ๋‹ค๋ฅธ ๋ณ€์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ์Œ์„ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ์ด ์˜ˆ์ œ์—์„œ๋Š” ๋™์ผํ•œ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค . ๋‹ค์Œ์€ ์กฐ๊ธˆ ๋” ์ •๊ตํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค.

// more pointers
#include <iostream>
using namespace std;

int main ()
{
  int firstvalue = 5, secondvalue = 15;
  int * p1, * p2;

  p1 = &firstvalue;  // p1 = address of firstvalue
  p2 = &secondvalue; // p2 = address of secondvalue
  *p1 = 10;          // value pointed to by p1 = 10
  *p2 = *p1;         // value pointed to by p2 = value pointed to by p1
  p1 = p2;           // p1 = p2 (value of pointer is copied)
  *p1 = 20;          // value pointed to by p1 = 20
  
  cout << "firstvalue is " << firstvalue << '\n';
  cout << "secondvalue is " << secondvalue << '\n';
  return 0;
}
์ฒซ ๋ฒˆ์งธ ๊ฐ’์€ 10์ž…๋‹ˆ๋‹ค.
๋‘ ๋ฒˆ์งธ ๊ฐ’์€ 20์ž…๋‹ˆ๋‹ค.

๊ฐ ํ• ๋‹น ์ž‘์—…์—๋Š” ๊ฐ ํ–‰์„ ์ฝ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์„ค๋ช…์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์•ฐํผ์ƒŒ๋“œ( &)๋ฅผ "์ฃผ์†Œ"๋กœ, ๋ณ„ํ‘œ( *)๋ฅผ "๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’"์œผ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค. ์—ญ์ฐธ์กฐ ์—ฐ์‚ฐ์ž ( ) ๊ฐ€ ์žˆ๋Š” ๊ฒƒ๊ณผ ์—†๋Š” ๋ชจ๋‘ ํฌ์ธํ„ฐ ๋ฐ

๊ฐ€ ์žˆ๋Š” ํ‘œํ˜„์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค . ์—ญ์ฐธ์กฐ ์—ฐ์‚ฐ์ž (*) ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ‘œํ˜„์‹์˜ ์˜๋ฏธ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์€ ํ‘œํ˜„์‹๊ณผ ๋งค์šฐ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ด ์—ฐ์‚ฐ์ž๊ฐ€ ํฌ์ธํ„ฐ ์ด๋ฆ„ ์•ž์— ์˜ฌ ๋•Œ ํ‘œํ˜„์‹์€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์„ ์ฐธ์กฐํ•˜๋Š” ๋ฐ˜๋ฉด ์ด ์—ฐ์‚ฐ์ž ์—†์ด ํฌ์ธํ„ฐ ์ด๋ฆ„์ด ๋‚˜ํƒ€๋‚˜๋ฉด ํฌ์ธํ„ฐ ์ž์ฒด์˜ ๊ฐ’(์ฆ‰, ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฃผ์†Œ)์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ฃผ์˜๋ฅผ ํ™˜๊ธฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.p1p2*

int * p1, * p2;

์ด๊ฒƒ์€ ์ด์ „ ์˜ˆ์ œ์—์„œ ์‚ฌ์šฉ๋œ ๋‘ ํฌ์ธํ„ฐ๋ฅผ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‘ ํฌ์ธํ„ฐ ๋ชจ๋‘ ์œ ํ˜• (ํฌ์ธํ„ฐ ) *์„ ๊ฐ–๊ธฐ ์œ„ํ•ด ๊ฐ ํฌ์ธํ„ฐ์— ๋ณ„ํ‘œ( )๊ฐ€ ์žˆ์Œ์— ์œ ์˜ ํ•˜์‹ญ์‹œ์˜ค. ์ด๋Š” ์šฐ์„  ์ˆœ์œ„ ๊ทœ์น™์œผ๋กœ ์ธํ•ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  ์ฝ”๋“œ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์„ ๊ฒฝ์šฐ:int*int

int * p1, p2;

p1์‹ค์ œ๋กœ type int*์ด์ง€๋งŒ p2type int์ž…๋‹ˆ๋‹ค. ์ด ๋ชฉ์ ์„ ์œ„ํ•ด ๊ณต๋ฐฑ์€ ์ „ํ˜€ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์–ด์จŒ๋“  ํฌ์ธํ„ฐ๋‹น ํ•˜๋‚˜์˜ ๋ณ„ํ‘œ๋ฅผ ๋„ฃ๋Š” ๊ฒƒ๋งŒ ๊ธฐ์–ตํ•˜๋ฉด ๋ช…๋ น๋ฌธ๋‹น ์—ฌ๋Ÿฌ ํฌ์ธํ„ฐ๋ฅผ ์„ ์–ธํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ํฌ์ธํ„ฐ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Š” ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์€ ๊ฐ ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ๋ช…๋ น๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํฌ์ธํ„ฐ์™€ ๋ฐฐ์—ด

๋ฐฐ์—ด์˜ ๊ฐœ๋…์€ ํฌ์ธํ„ฐ์˜ ๊ฐœ๋…๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๋ฐฐ์—ด์€ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ์™€ ๋งค์šฐ ์œ ์‚ฌํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋ฉฐ ์‹ค์ œ๋กœ ๋ฐฐ์—ด์€ ํ•ญ์ƒ ์ ์ ˆํ•œ ์œ ํ˜•์˜ ํฌ์ธํ„ฐ๋กœ ์•”์‹œ์ ์œผ๋กœ ๋ณ€ํ™˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ๋‘ ์„ ์–ธ์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.

int myarray [20];
int * mypointer;

๋‹ค์Œ ํ• ๋‹น ์ž‘์—…์ด ์œ ํšจํ•ฉ๋‹ˆ๋‹ค.

mypointer = myarray;

๊ทธ ํ›„, mypointer๋ฐ myarray๋Š” ๋™๋“ฑํ•˜๊ณ  ๋งค์šฐ ์œ ์‚ฌํ•œ ์†์„ฑ์„ ๊ฐ–์Šต๋‹ˆ๋‹ค. ์ฃผ์š” ์ฐจ์ด์ ์€ mypointer๋‹ค๋ฅธ ์ฃผ์†Œ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ˜๋ฉด myarray์•„๋ฌด ๊ฒƒ๋„ ํ• ๋‹นํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ํ•ญ์ƒ type ์˜ 20๊ฐœ ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋œ ๋™์ผํ•œ ๋ธ”๋ก์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค int. ๋”ฐ๋ผ์„œ ๋‹ค์Œ ํ• ๋‹น์€ ์œ ํšจํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

myarray = mypointer;

๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ๋ฅผ ํ˜ผํ•ฉํ•˜๋Š” ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

// more pointers
#include <iostream>
using namespace std;

int main ()
{
  int numbers[5];
  int * p;
  p = numbers;  *p = 10;
  p++;  *p = 20;
  p = &numbers[2];  *p = 30;
  p = numbers + 3;  *p = 40;
  p = numbers;  *(p+4) = 50;
  for (int n=0; n<5; n++)
    cout << numbers[n] << ", ";
  return 0;
}
10, 20, 30, 40, 50,

ํฌ์ธํ„ฐ์™€ ๋ฐฐ์—ด์€ ๋™์ผํ•œ ์ž‘์—… ์ง‘ํ•ฉ์„ ์ง€์›ํ•˜๋ฉฐ ๋‘˜ ๋‹ค ๋™์ผํ•œ ์˜๋ฏธ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค. ์ฃผ์š” ์ฐจ์ด์ ์€ ํฌ์ธํ„ฐ์—๋Š” ์ƒˆ ์ฃผ์†Œ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฐฐ์—ด์—๋Š” ํ• ๋‹นํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฐฐ์—ด์— ๋Œ€ํ•œ ์žฅ์—์„œ ๋Œ€๊ด„ํ˜ธ( [])๋Š” ๋ฐฐ์—ด ์š”์†Œ์˜ ์ธ๋ฑ์Šค๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์„ค๋ช…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์ด ๋Œ€๊ด„ํ˜ธ๋Š” ์˜คํ”„์…‹ ์—ฐ์‚ฐ์ž ๋กœ ์•Œ๋ ค์ง„ ์—ญ์ฐธ์กฐ ์—ฐ์‚ฐ์ž ์ž…๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋’ค๋”ฐ๋ฅด๋Š” ๋ณ€์ˆ˜๋ฅผ ์—ญ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์—ญ์ฐธ์กฐ *ํ•˜์ง€๋งŒ ์—ญ์ฐธ์กฐ๋˜๋Š” ์ฃผ์†Œ์— ๋Œ€๊ด„ํ˜ธ ์‚ฌ์ด์˜ ์ˆซ์ž๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

a[5] = 0;       // a [offset of 5] = 0
*(a+5) = 0;     // pointed to by (a+5) = 0

์ด ๋‘ ํ‘œํ˜„์‹์€ if a๊ฐ€ ํฌ์ธํ„ฐ์ผ ๋ฟ๋งŒ โ€‹โ€‹์•„๋‹ˆ๋ผ if a๊ฐ€ ๋ฐฐ์—ด์ธ ๊ฒฝ์šฐ์—๋„ ๋™์ผํ•˜๊ณ  ์œ ํšจํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ์—ด์ธ ๊ฒฝ์šฐ ํ•ด๋‹น ์ด๋ฆ„์„ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ์„ ๊ธฐ์–ตํ•˜์‹ญ์‹œ์˜ค.

ํฌ์ธํ„ฐ ์ดˆ๊ธฐํ™”

ํฌ์ธํ„ฐ๊ฐ€ ์ •์˜๋˜๋Š” ๋ฐ”๋กœ ๊ทธ ์ˆœ๊ฐ„์— ํŠน์ • ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํฌ์ธํ„ฐ๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

int myvar;
int * myptr = &myvar;

์ด ์ฝ”๋“œ ์ดํ›„์˜ ๋ณ€์ˆ˜์˜ ๊ฒฐ๊ณผ ์ƒํƒœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

int myvar;
int * myptr;
myptr = &myvar;

ํฌ์ธํ„ฐ๊ฐ€ ์ดˆ๊ธฐํ™”๋  ๋•Œ ์ดˆ๊ธฐํ™”๋˜๋Š” ๊ฒƒ์€ ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฃผ์†Œ(์ฆ‰, myptr)์ด๋ฉฐ, ๊ฒฐ์ฝ” ๊ฐ’์ด ๊ฐ€๋ฆฌํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์ฆ‰, *myptr). ๋”ฐ๋ผ์„œ ์œ„์˜ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ํ˜ผ๋™๋˜์–ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

int myvar;
int * myptr;
*myptr = &myvar;

์–ด์จŒ๋“  ๋งŽ์€ ์˜๋ฏธ๊ฐ€ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค (๊ทธ๋ฆฌ๊ณ  ์œ ํšจํ•œ ์ฝ”๋“œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค).

ํฌ์ธํ„ฐ ์„ ์–ธ(๋ผ์ธ 2) ์˜ ๋ณ„ํ‘œ( *)๋Š” ํฌ์ธํ„ฐ์ž„์„ ๋‚˜ํƒ€๋‚ผ ๋ฟ์ด๋ฉฐ, ์ด๋Š” ์—ญ์ฐธ์กฐ ์—ฐ์‚ฐ์ž(๋ผ์ธ 3์—์„œ์™€ ๊ฐ™์ด)๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ๋ชจ๋‘ ๊ฐ™์€ ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค *. . ํ•ญ์ƒ ๊ทธ๋ ‡๋“ฏ์ด ๊ณต๋ฐฑ์€ ๊ด€๋ จ์ด ์—†์œผ๋ฉฐ ํ‘œํ˜„์˜ ์˜๋ฏธ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํฌ์ธํ„ฐ๋Š” ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ(์œ„์˜ ๊ฒฝ์šฐ์™€ ๊ฐ™์ด) ๋˜๋Š” ๋‹ค๋ฅธ ํฌ์ธํ„ฐ(๋˜๋Š” ๋ฐฐ์—ด)์˜ ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

int myvar;
int *foo = &myvar;
int *bar = foo;

ํฌ์ธํ„ฐ ์‚ฐ์ˆ 

ํฌ์ธํ„ฐ์—์„œ ์‚ฐ์ˆ  ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์€ ์ผ๋ฐ˜ ์ •์ˆ˜ ์œ ํ˜•์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ์•ฝ๊ฐ„ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์šฐ์„  ๋ง์…ˆ๊ณผ ๋บ„์…ˆ ์—ฐ์‚ฐ๋งŒ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฒƒ๋“ค์€ ํฌ์ธํ„ฐ์˜ ์„ธ๊ณ„์—์„œ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋”ํ•˜๊ธฐ์™€ ๋นผ๊ธฐ๋Š” ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ์ดํ„ฐ ์œ ํ˜•์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ํฌ์ธํ„ฐ์™€ ์•ฝ๊ฐ„ ๋‹ค๋ฅธ ๋™์ž‘์„ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ์œ ํ˜•์ด ๋„์ž…๋˜์—ˆ์„ ๋•Œ ์œ ํ˜•์˜ ํฌ๊ธฐ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด: charํ•ญ์ƒ 1๋ฐ”์ดํŠธ์˜ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง€๋ฉฐ ์ผ๋ฐ˜์  short์œผ๋กœ ๊ทธ๋ณด๋‹ค ํฌ๋ฉฐ ํ›จ์”ฌ ๋” ํฝ๋‹ˆ๋‹ค. ์ด๋“ค์˜ ์ •ํ™•ํ•œ ํฌ๊ธฐ๋Š” ์‹œ์Šคํ…œ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ฃผ์–ด์ง„ ์‹œ์Šคํ…œ์—์„œ 1๋ฐ”์ดํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  2๋ฐ”์ดํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  4๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.intlongcharshortlong

์ด์ œ ์ด ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ์„ธ ๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ์ •์˜ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

char *mychar;
short *myshort;
long *mylong;

๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ๋“ค์ด ๊ฐ๊ฐ ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜ 1000, 2000, ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  3000์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•˜๋ฉด

++mychar;
++myshort;
++mylong;

mychar, ์˜ˆ์ƒ๋Œ€๋กœ ๊ฐ’ 1001์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ช…ํ™•ํ•˜์ง€ ์•Š์€ ๊ฒƒ์€ myshort๊ฐ’ 2002๋ฅผ ํฌํ•จํ•˜๊ณ  mylong๊ฐ๊ฐ์ด ํ•œ ๋ฒˆ๋งŒ ์ฆ๊ฐ€ํ–ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  3004๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ํฌ์ธํ„ฐ์— 1์„ ์ถ”๊ฐ€ํ•  ๋•Œ ๋™์ผํ•œ ์œ ํ˜•์˜ ๋‹ค์Œ ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํฌ์ธํ„ฐ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์œ ํ˜•์˜ ๋ฐ”์ดํŠธ ๋‹จ์œ„ ํฌ๊ธฐ๊ฐ€ ํฌ์ธํ„ฐ์— ์ถ”๊ฐ€๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.


์ด๊ฒƒ์€ ํฌ์ธํ„ฐ์— ์ˆซ์ž๋ฅผ ๋”ํ•˜๊ฑฐ๋‚˜ ๋บ„ ๋•Œ ๋ชจ๋‘ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•˜๋ฉด ์ •ํ™•ํžˆ ๋™์ผํ•˜๊ฒŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

mychar = mychar + 1;
myshort = myshort + 1;
mylong = mylong + 1;

์ฆ๊ฐ€( ++) ๋ฐ ๊ฐ์†Œ( --) ์—ฐ์‚ฐ์ž์™€ ๊ด€๋ จํ•˜์—ฌ ๋‘˜ ๋‹ค ์‹์˜ ์ ‘๋‘์‚ฌ ๋˜๋Š” ์ ‘๋ฏธ์‚ฌ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋™์ž‘์— ์•ฝ๊ฐ„์˜ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ‘๋‘์‚ฌ๋กœ ์ฆ๋ถ„์€ ์‹์„ ํ‰๊ฐ€ํ•˜๊ธฐ ์ „์— ๋ฐœ์ƒํ•˜๊ณ  ์ ‘๋ฏธ์‚ฌ๋กœ, ์ฆ๋ถ„์€ ํ‘œํ˜„์‹์ด ํ‰๊ฐ€๋œ ํ›„์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. *์ด๋Š” ํฌ์ธํ„ฐ ์ฆ๊ฐ€ ๋ฐ ๊ฐ์†Œ ํ‘œํ˜„์‹์—๋„ ์ ์šฉ๋˜๋ฉฐ, ์ด๋Š” ์—ญ์ฐธ์กฐ ์—ฐ์‚ฐ์ž( ) ๋„ ํฌํ•จํ•˜๋Š” ๋” ๋ณต์žกํ•œ ํ‘œํ˜„์‹์˜ ์ผ๋ถ€๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . ์—ฐ์‚ฐ์ž ์šฐ์„  ์ˆœ์œ„ ๊ทœ์น™์„ ๊ธฐ์–ตํ•˜๋ฉด ์ฆ๊ฐ€ ๋ฐ ๊ฐ์†Œ์™€ ๊ฐ™์€ ํ›„์œ„ ์—ฐ์‚ฐ์ž๊ฐ€ ์—ญ์ฐธ์กฐ ์—ฐ์‚ฐ์ž( *)์™€ ๊ฐ™์€ ์ ‘๋‘ ์—ฐ์‚ฐ์ž๋ณด๋‹ค ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋†’๋‹ค๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค์Œ ํ‘œํ˜„์‹:

*p++

์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค *(p++). ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์ด ํ•˜๋Š” ์ผ์€ p(์ด์ œ ๋‹ค์Œ ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก) ์˜ ๊ฐ’์„ ๋†’์ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ++๊ฐ€ ์ ‘๋ฏธ์‚ฌ๋กœ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด ํ‘œํ˜„์‹์€ ์›๋ž˜ ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์œผ๋กœ ํ‰๊ฐ€๋ฉ๋‹ˆ๋‹ค(์ฆ๊ฐ€๋˜๊ธฐ ์ „์— ๊ฐ€๋ฆฌํ‚จ ์ฃผ์†Œ). ).

๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค์Œ์€ ์ฆ๊ฐ€ ์—ฐ์‚ฐ์ž์˜ ์ ‘๋‘์‚ฌ ๋ฐ ์ ‘๋ฏธ์‚ฌ ๋ฒ„์ „์ด ์žˆ๋Š” ์—ญ์ฐธ์กฐ ์—ฐ์‚ฐ์ž์˜ ๋„ค ๊ฐ€์ง€ ๊ฐ€๋Šฅํ•œ ์กฐํ•ฉ์ž…๋‹ˆ๋‹ค(๊ฐ์†Œ ์—ฐ์‚ฐ์ž์—๋„ ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋จ).

*p++   // same as *(p++): increment pointer, and dereference unincremented address
*++p   // same as *(++p): increment pointer, and dereference incremented address
++*p   // same as ++(*p): dereference pointer, and increment the value it points to
(*p)++ // dereference pointer, and post-increment the value it points to 

์ด๋Ÿฌํ•œ ์—ฐ์‚ฐ์ž์™€ ๊ด€๋ จ๋œ ์ผ๋ฐ˜์ ์ด์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•˜์ง€ ์•Š์€ ๋ช…๋ น๋ฌธ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

*p++ = *q++;

 ๋ฐ ๋ชจ๋‘ ++๋ณด๋‹ค ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋†’๊ธฐ ๋•Œ๋ฌธ์— ์ฆ๋ถ„ ์—ฐ์‚ฐ์ž( )๋Š” ์ ‘๋‘์‚ฌ๊ฐ€ ์•„๋‹ˆ๋ผ ์ ‘๋ฏธ์‚ฌ๋กœ ์‚ฌ์šฉ๋˜๋ฏ€๋กœ ์— ํ• ๋‹น๋œ ๊ฐ’ ์€ ๋‘˜ ๋‹ค ์•ž์— ์žˆ๊ณ  ์ฆ๋ถ„๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‘˜ ๋‹ค ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋žต ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.*pq++*p*qpq

*p = *q;
++p;
++q;

ํ•ญ์ƒ ๊ทธ๋ ‡๋“ฏ์ด ๊ด„ํ˜ธ๋Š” ํ‘œํ˜„์— ๊ฐ€๋…์„ฑ์„ ๋”ํ•˜์—ฌ ํ˜ผ๋™์„ ์ค„์ž…๋‹ˆ๋‹ค.

ํฌ์ธํ„ฐ์™€ const

ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ์ฃผ์†Œ๋กœ ๋ณ€์ˆ˜์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด ์•ก์„ธ์Šค์—๋Š” ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’ ์ˆ˜์ •์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํฌ์ธํ„ฐ ๊ฐ’์„ ์ฝ๊ธฐ ์œ„ํ•ด ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ˆ˜์ •ํ•  ์ˆ˜๋Š” ์—†๋Š” ํฌ์ธํ„ฐ๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์œ ํ˜•์„ ๋กœ ํ•œ์ •ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค const. ์˜ˆ๋ฅผ ๋“ค์–ด:

int x;
int y = 10;
const int * p = &y;
x = *p;          // ok: reading p
*p = x;          // error: modifying p, which is const-qualified

์—ฌ๊ธฐ p์—์„œ ๋ณ€์ˆ˜๋ฅผ ๊ฐ€๋ฆฌ ํ‚ค์ง€๋งŒ constํ•œ์ •๋œ ๋ฐฉ์‹์œผ๋กœ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. ์ฆ‰, ๊ฐ€๋ฆฌํ‚จ ๊ฐ’์„ ์ฝ์„ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ์ˆ˜์ •ํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํ‘œํ˜„์‹ &y์€ type int*์ด์ง€๋งŒ type ์˜ ํฌ์ธํ„ฐ์— ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค const int*. ์ด๊ฒƒ์€ ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค: ๋น„ const์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋Š” ์•”์‹œ์ ์œผ๋กœ const์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋กœ ๋ณ€ํ™˜๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ ๋ฐ˜๋Œ€๋Š” ์•„๋‹™๋‹ˆ๋‹ค! ์•ˆ์ „ ๊ธฐ๋Šฅ์œผ๋กœ ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ const๋Š” ์•”์‹œ์ ์œผ๋กœ non- ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค const.

์š”์†Œ ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€ ์ค‘ ํ•˜๋‚˜๋Š” constํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹Œ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉ constํ•˜๋Š” ํ•จ์ˆ˜๋Š” ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋œ ๊ฐ’์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํฌ์ธํ„ฐ๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜๋Š” ์ˆ˜์ •ํ•  const์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

// pointers as arguments:
#include <iostream>
using namespace std;

void increment_all (int* start, int* stop)
{
  int * current = start;
  while (current != stop) {
    ++(*current);  // increment value pointed
    ++current;     // increment pointer
  }
}

void print_all (const int* start, const int* stop)
{
  const int * current = start;
  while (current != stop) {
    cout << *current << '\n';
    ++current;     // increment pointer
  }
}

int main ()
{
  int numbers[] = {10,20,30};
  increment_all (numbers,numbers+3);
  print_all (numbers,numbers+3);
  return 0;
}
11
21
31

print_all์ƒ์ˆ˜ ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค . ์ด๋Ÿฌํ•œ ํฌ์ธํ„ฐ๋Š” ์ˆ˜์ •ํ•  ์ˆ˜ ์—†๋Š” ์ƒ์ˆ˜ ๋‚ด์šฉ์„ ๊ฐ€๋ฆฌํ‚ค์ง€๋งŒ ์ž์ฒด์ ์œผ๋กœ๋Š” ์ผ์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฆ‰, ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ ํฌ์ธํ„ฐ๋Š” ๊ณ„์† ์ฆ๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์ฃผ์†Œ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ constness์— ๋Œ€ํ•œ ๋‘ ๋ฒˆ์งธ ์ฐจ์›์ด ํฌ์ธํ„ฐ์— ์ถ”๊ฐ€๋˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค. ํฌ์ธํ„ฐ ์ž์ฒด๋„ const์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ const๋ฅผ ํฌ์ธํŠธ ํƒ€์ž…(๋ณ„ํ‘œ ๋’ค)์— ์ถ”๊ฐ€ํ•˜์—ฌ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

int x;
      int *       p1 = &x;  // non-const pointer to non-const int
const int *       p2 = &x;  // non-const pointer to const int
      int * const p3 = &x;  // const pointer to non-const int
const int * const p4 = &x;  // const pointer to const int

๋ฐ ํฌ์ธํ„ฐ ์˜ ๊ตฌ๋ฌธ const์€ ํ™•์‹คํžˆ ๊นŒ๋‹ค๋กœ์šฐ๋ฉฐ ๊ฐ ์šฉ๋„์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๊ฒฝ์šฐ๋ฅผ ์ธ์‹ํ•˜๋ ค๋ฉด ์•ฝ๊ฐ„์˜ ๊ฒฝํ—˜์ด ํ•„์š”ํ•œ ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“ , ํฌ์ธํ„ฐ(๋ฐ ์ฐธ์กฐ)์— ๋Œ€ํ•œ ์ผ๊ด€์„ฑ์„ ๋‚˜์ค‘์— ๋ณด๋‹ค ๋นจ๋ฆฌ ์–ป๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜์ง€๋งŒ, ํฌ์ธํ„ฐ์™€ ํฌ์ธํ„ฐ์˜ ์กฐํ•ฉ์— ์ฒ˜์Œ ๋…ธ์ถœ๋˜๋Š” ๊ฒฝ์šฐ ๋ชจ๋“  ๊ฒƒ์„ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋„ˆ๋ฌด ๊ฑฑ์ •ํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค const. ๋‹ค์Œ ์žฅ์—์„œ ๋” ๋งŽ์€ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ๋‚˜ํƒ€๋‚  ๊ฒƒ์ž…๋‹ˆ๋‹ค. with ํฌ์ธํ„ฐ

์˜ ๊ตฌ๋ฌธ์— ์•ฝ๊ฐ„์˜ ํ˜ผ๋ž€์„ ๋”ํ•˜๊ธฐ ์œ„ํ•ด ํ•œ์ •์ž๋Š” ์ •ํ™•ํžˆ ๊ฐ™์€ ์˜๋ฏธ๋กœ ๋พฐ์กฑํ•œ ์œ ํ˜• ์•ž์ด๋‚˜ ๋’ค์— ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const int * p2a = &x;  //      non-const pointer to const int
int const * p2b = &x;  // also non-const pointer to const int

๋ณ„ํ‘œ๋ฅผ ๋‘˜๋Ÿฌ์‹ผ ๊ณต๋ฐฑ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ด ๊ฒฝ์šฐ const์˜ ์ˆœ์„œ๋Š” ๋‹จ์ˆœํžˆ ์Šคํƒ€์ผ์˜ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์ด ์žฅ์—์„œ๋Š” ์ ‘๋‘์‚ฌ const๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์—ญ์‚ฌ์  ์ด์œ ๋กœ ์ด๊ฒƒ์ด ๋” ํ™•์žฅ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ๋‘˜ ๋‹ค ์ •ํ™•ํžˆ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์Šคํƒ€์ผ์˜ ์žฅ์ ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์ธํ„ฐ๋„ท์—์„œ ์น˜์—ดํ•˜๊ฒŒ ๋…ผ์˜๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํฌ์ธํ„ฐ์™€ ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด

์•ž์—์„œ ์ง€์ ํ–ˆ๋“ฏ์ด ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด ์€ null๋กœ ๋๋‚˜๋Š” ๋ฌธ์ž ์‹œํ€€์Šค๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค. ์ด์ „ ์„น์…˜์—์„œ ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์€ ์— ์ง์ ‘ ์‚ฝ์ž…๋˜์–ด cout๋ฌธ์ž์—ด์„ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ๋ฌธ์ž ๋ฐฐ์—ด์„ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ง์ ‘ ์•ก์„ธ์Šคํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์€ ๋ชจ๋“  ๋ฌธ์ž์™€ ์ข…๋ฃŒ null ๋ฌธ์ž๋ฅผ ํฌํ•จํ•˜๋Š” ์ ์ ˆํ•œ ๋ฐฐ์—ด ์œ ํ˜•์˜ ๋ฐฐ์—ด์ด๋ฉฐ, ๊ฐ ์š”์†Œ๋Š” ์œ ํ˜• const char(๋ฆฌํ„ฐ๋Ÿด์ด๋ฏ€๋กœ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์Œ)์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

const char * foo = "hello";

์ด๊ฒƒ์€ ์— ๋Œ€ํ•œ ๋ฆฌํ„ฐ๋Ÿด ํ‘œํ˜„์œผ๋กœ ๋ฐฐ์—ด์„ ์„ ์–ธํ•œ "hello"๋‹ค์Œ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๊ฐ€ ์— ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค foo. ๊ทธ๊ฒƒ์ด ์ฃผ์†Œ 1702์—์„œ ์‹œ์ž‘ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜์— ์ €์žฅ๋˜์–ด ์žˆ๋‹ค๊ณ  ์ƒ์ƒ ํ•˜๋ฉด ์ด์ „ ์„ ์–ธ์„ ๋‹ค์Œ ๊ณผ "hello"๊ฐ™์ด ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์—ฌ๊ธฐ foo์— ํฌ์ธํ„ฐ๊ฐ€ ์žˆ๊ณ  ๊ฐ’ 1702๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. 1702๋Š” ์‹ค์ œ๋กœ ๋‘ ์ฃผ์†Œ ๋ชจ๋‘ ์ด๊ฒƒ๋“ค. ํฌ์ธํ„ฐ ๋Š” ์ผ๋ จ์˜ ๋ฌธ์ž๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. ํฌ์ธํ„ฐ์™€ ๋ฐฐ์—ด์€ ํ‘œํ˜„์‹์—์„œ ๋ณธ์งˆ์ ์œผ๋กœ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— null๋กœ ๋๋‚˜๋Š” ๋ฌธ์ž ์‹œํ€€์Šค์˜ ๋ฐฐ์—ด๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋ฌธ์ž์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:'h'"hello"

*(foo+4)
foo[4]

๋‘ ํ‘œํ˜„์‹ ๋ชจ๋‘ 'o'(๋ฐฐ์—ด์˜ ๋‹ค์„ฏ ๋ฒˆ์งธ ์š”์†Œ) ๊ฐ’์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.

 

ํฌ์ธํ„ฐ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ

C++์—์„œ๋Š” ํฌ์ธํ„ฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ํฌ์ธํ„ฐ๋Š” ์ฐจ๋ก€๋กœ ๋ฐ์ดํ„ฐ(๋˜๋Š” ๋‹ค๋ฅธ ํฌ์ธํ„ฐ๋„ ๊ฐ€๋ฆฌํ‚ด)๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. ๊ตฌ๋ฌธ *์—๋Š” ํฌ์ธํ„ฐ ์„ ์–ธ์˜ ๊ฐ ๊ฐ„์ ‘ ์ฐธ์กฐ ์ˆ˜์ค€์— ๋Œ€ํ•ด ๋ณ„ํ‘œ( )๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

char a;
char * b;
char ** c;
a = 'z';
b = &a;
c = &b;

7230์ด๊ฒƒ์€ , 8092, ๋ฐ ์˜ ๊ฐ ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ์ž„์˜๋กœ ์„ ํƒ๋œ ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜๋ฅผ 10502๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๊ฐ ๋ณ€์ˆ˜์˜ ๊ฐ’์€ ํ•ด๋‹น ์…€ ๋‚ด๋ถ€์— ํ‘œ์‹œ๋˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ์˜ ํ•ด๋‹น ์ฃผ์†Œ๋Š” ๊ทธ ์•„๋ž˜ ๊ฐ’์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ด ์˜ˆ์ œ์˜ ์ƒˆ๋กœ์šด ์ ์€ cํฌ์ธํ„ฐ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ์ธ variable ์ด๋ฉฐ ์„ธ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๊ฐ„์ ‘ ์ฐธ์กฐ ์ˆ˜์ค€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ฐ๊ฐ์€ ๋‹ค๋ฅธ ๊ฐ’์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

  • c์œ ํ˜• char**๋ฐ ๊ฐ’8092
  • *c์œ ํ˜• char*๋ฐ ๊ฐ’7230
  • **c์œ ํ˜• char๋ฐ ๊ฐ’'z'

void pointer

ํฌ์ธํ„ฐ ์˜ void์œ ํ˜•์€ ํŠน๋ณ„ํ•œ ์œ ํ˜•์˜ ํฌ์ธํ„ฐ์ž…๋‹ˆ๋‹ค. C++์—์„œ void์œ ํ˜•์ด ์—†์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ voidํฌ์ธํ„ฐ๋Š” ์œ ํ˜•์ด ์—†๋Š” ๊ฐ’์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ void์ •์ˆ˜ ๊ฐ’์ด๋‚˜ ๋ถ€๋™ ์†Œ์ˆ˜์ ์—์„œ ๋ฌธ์ž์—ด์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํฌ์ธํ„ฐ์— ํฐ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๋Œ€๊ฐ€๋กœ ๊ทธ๊ฒƒ๋“ค์€ ํฐ ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค: ๊ทธ๋“ค์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ์ดํ„ฐ๋Š” ์ง์ ‘ ์—ญ์ฐธ์กฐ๋  ์ˆ˜ ์—†์œผ๋ฉฐ(์—ญ์ฐธ์กฐํ•  ์œ ํ˜•์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋…ผ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค), ๊ทธ๋Ÿฐ ์ด์œ ๋กœ voidํฌ์ธํ„ฐ์˜ ๋ชจ๋“  ์ฃผ์†Œ๋Š” ์ผ๋ถ€ ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ญ์ฐธ์กฐ๋˜๊ธฐ ์ „์— ๊ตฌ์ฒด์ ์ธ ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋‹ค๋ฅธ ํฌ์ธํ„ฐ ์œ ํ˜•.

๊ฐ€๋Šฅํ•œ ์šฉ๋„ ์ค‘ ํ•˜๋‚˜๋Š” ํ•จ์ˆ˜์— ์ผ๋ฐ˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:

// increaser
#include <iostream>
using namespace std;

void increase (void* data, int psize)
{
  if ( psize == sizeof(char) )
  { char* pchar; pchar=(char*)data; ++(*pchar); }
  else if (psize == sizeof(int) )
  { int* pint; pint=(int*)data; ++(*pint); }
}

int main ()
{
  char a = 'x';
  int b = 1602;
  increase (&a,sizeof(a));
  increase (&b,sizeof(b));
  cout << a << ", " << b << '\n';
  return 0;
}
์˜ˆ, 1603

sizeof์ธ์ˆ˜์˜ ํฌ๊ธฐ๋ฅผ ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” C++ ์–ธ์–ด์— ํ†ตํ•ฉ๋œ ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค. ๋น„๋™์  ๋ฐ์ดํ„ฐ ์œ ํ˜•์˜ ๊ฒฝ์šฐ ์ด ๊ฐ’์€ ์ƒ์ˆ˜์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์˜ˆ๋ฅผ ๋“ค์–ด ๋Š” ํ•ญ์ƒ 1๋ฐ”์ดํŠธ ํฌ๊ธฐ๋ฅผ sizeof(char)๊ฐ–๊ธฐ ๋•Œ๋ฌธ์— 1 ์ž…๋‹ˆ๋‹ค.char

์œ ํšจํ•˜์ง€ ์•Š์€ ํฌ์ธํ„ฐ ๋ฐ ๋„ ํฌ์ธํ„ฐ

์›์น™์ ์œผ๋กœ ํฌ์ธํ„ฐ๋Š” ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ๋‚˜ ๋ฐฐ์—ด ์š”์†Œ์˜ ์ฃผ์†Œ์™€ ๊ฐ™์€ ์œ ํšจํ•œ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํฌ์ธํ„ฐ๋Š” ์œ ํšจํ•œ ์š”์†Œ๋ฅผ ์ฐธ์กฐํ•˜์ง€ ์•Š๋Š” ์ฃผ์†Œ๋ฅผ ํฌํ•จํ•˜์—ฌ ์‹ค์ œ๋กœ ๋ชจ๋“  ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ์˜ˆ๋Š” ์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ํฌ์ธํ„ฐ ์™€ ๋ฐฐ์—ด์˜ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์š”์†Œ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ์ž…๋‹ˆ๋‹ค.

int * p;               // uninitialized pointer (local variable)

int myarray[10];
int * q = myarray+20;  // element out of bounds 

p๊ฐ’์„ ํฌํ•จํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์•Œ๋ ค์ง„ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค ๊ฑฐ๋‚˜ ๊ฐ€๋ฆฌํ‚ค์ง€ ์•Š์ง€๋งŒ ์œ„์˜ ๋ช…๋ น๋ฌธ ์ค‘ ์–ด๋А q๊ฒƒ๋„ ์˜ค๋ฅ˜๋ฅผ ์ผ์œผํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. C++์—์„œ ํฌ์ธํ„ฐ๋Š” ํ•ด๋‹น ์ฃผ์†Œ์— ์‹ค์ œ๋กœ ๋ฌด์–ธ๊ฐ€๊ฐ€ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ๋ชจ๋“  ์ฃผ์†Œ ๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๊ทธ๋Ÿฌํ•œ ํฌ์ธํ„ฐ๋ฅผ ์—ญ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(์ฆ‰, ์‹ค์ œ๋กœ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์— ์•ก์„ธ์Šคํ•˜๋Š” ๊ฒฝ์šฐ). ์ด๋Ÿฌํ•œ ํฌ์ธํ„ฐ์— ์•ก์„ธ์Šคํ•˜๋ฉด ๋Ÿฐํƒ€์ž„ ์ค‘ ์˜ค๋ฅ˜์—์„œ ์ž„์˜์˜ ๊ฐ’์— ์•ก์„ธ์Šคํ•˜๋Š” ๊ฒƒ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ์ •์˜๋˜์ง€ ์•Š์€ ๋™์ž‘์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋•Œ๋•Œ๋กœ ํฌ์ธํ„ฐ๋Š” ์œ ํšจํ•˜์ง€ ์•Š์€ ์ฃผ์†Œ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ช…์‹œ์ ์œผ๋กœ ์•„๋ฌด๋ฐ๋„ ๊ฐ€๋ฆฌํ‚ฌ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌํ•œ ๊ฒฝ์šฐ, ๋ชจ๋“  ํฌ์ธํ„ฐ ์œ ํ˜•์ด ์ทจํ•  ์ˆ˜ ์žˆ๋Š” ํŠน๋ณ„ํ•œ ๊ฐ’์ด ์žˆ์Šต๋‹ˆ๋‹ค: null ํฌ์ธํ„ฐ ๊ฐ’ . ์ด ๊ฐ’์€ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ C++์—์„œ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •์ˆ˜ ๊ฐ’ 0 ๋˜๋Š”nullptr์˜ˆ์–ด:

int * p = 0;
int * q = nullptr;

์—ฌ๊ธฐ์—์„œ p๋ฐ ๋‘˜ q๋‹ค null ํฌ์ธํ„ฐ ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ๋ช…์‹œ์ ์œผ๋กœ ์•„๋ฌด ๊ณณ๋„ ๊ฐ€๋ฆฌํ‚ค์ง€ ์•Š์œผ๋ฉฐ ์‹ค์ œ๋กœ ๋‘˜ ๋‹ค ๋™์ผํ•˜๊ฒŒ ๋น„๊ต๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  null ํฌ์ธํ„ฐ ๋Š” ๋‹ค๋ฅธ null ํฌ์ธํ„ฐ ์™€ ๋™์ผํ•˜๊ฒŒ ๋น„๊ต ๋ฉ๋‹ˆ๋‹ค. null ํฌ์ธํ„ฐ ๊ฐ’ NULL์„ ์ฐธ์กฐํ•˜๊ธฐ ์œ„ํ•ด ์ด์ „ ์ฝ”๋“œ์—์„œ ์ •์˜๋œ ์ƒ์ˆ˜๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ ๋ณด๋Š” ๊ฒƒ๋„ ๋งค์šฐ ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค .

int * r = NULL;

NULLํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์—ฌ๋Ÿฌ ํ—ค๋”์— ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ ์ผ๋ถ€ null ํฌ์ธํ„ฐ ์ƒ์ˆ˜ ๊ฐ’(์˜ˆ: 0๋˜๋Š” nullptr)์˜ ๋ณ„์นญ์œผ๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ๋„ ํฌ์ธํ„ฐ ์™€ ํฌ์ธํ„ฐ๋ฅผ

ํ˜ผ๋™ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค ! ๋„ ํฌ์ธํ„ฐ ๋Š” ํฌ์ธํ„ฐ๊ฐ€ "์•„๋ฌด๋ฐ๋„"๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์Œ์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ์ทจํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์ด๊ณ , ํฌ์ธํ„ฐ ๋Š” ํŠน์ • ์œ ํ˜• ์—†์ด ์–ด๋”˜๊ฐ€๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๋Š” ํฌ์ธํ„ฐ ์œ ํ˜•์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ํฌ์ธํ„ฐ์— ์ €์žฅ๋œ ๊ฐ’์„ ์ฐธ์กฐํ•˜๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.voidvoid

ํ•จ์ˆ˜์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ

C++์—์„œ๋Š” ํ•จ์ˆ˜์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์˜ ์ผ๋ฐ˜์ ์ธ ์šฉ๋„๋Š” ํ•จ์ˆ˜๋ฅผ ๋‹ค๋ฅธ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•จ์ˆ˜์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋Š” ์ผ๋ฐ˜ ํ•จ์ˆ˜ ์„ ์–ธ๊ณผ ๋™์ผํ•œ ๊ตฌ๋ฌธ์œผ๋กœ ์„ ์–ธ๋ฉ๋‹ˆ๋‹ค. ๋‹จ, ํ•จ์ˆ˜ ์ด๋ฆ„์€ ๊ด„ํ˜ธ()๋กœ ๋ฌถ์ด๊ณ  *์ด๋ฆ„ ์•ž์— ๋ณ„ํ‘œ( )๊ฐ€ ์‚ฝ์ž…๋ฉ๋‹ˆ๋‹ค.

// pointer to functions
#include <iostream>
using namespace std;

int addition (int a, int b)
{ return (a+b); }

int subtraction (int a, int b)
{ return (a-b); }

int operation (int x, int y, int (*functocall)(int,int))
{
  int g;
  g = (*functocall)(x,y);
  return (g);
}

int main ()
{
  int m,n;
  int (*minus)(int,int) = subtraction;

  m = operation (7, 5, addition);
  n = operation (20, m, minus);
  cout <<n;
  return 0;
}
8

์œ„์˜ ์˜ˆ์—์„œ minus๋Š” ์œ ํ˜•์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋‘ ๊ฐœ ์žˆ๋Š” ํ•จ์ˆ˜์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ์ž…๋‹ˆ๋‹ค int. ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ์ง์ ‘ ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค subtraction.

int (* minus)(int,int) = subtraction;

'๐Ÿ“ Development Study > ๐Ÿ‘จ๐Ÿพโ€๐Ÿ’ป C++' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๊ตฌ์กฐ์ฒด  (0) 2022.08.19
๋™์  ๋ฉ”๋ชจ๋ฆฌ  (0) 2022.08.19
๋ฌธ์ž์—ด  (0) 2022.08.19
๋ฐฐ์—ด  (0) 2022.08.19
namespace  (0) 2022.08.18

๋Œ“๊ธ€