12. [C / C++] ํฌ์ธํ„ฐ์™€ ๋ ˆํผ๋Ÿฐ์Šค์˜ ์ฐจ์ด

2019. 5. 25. 00:30ใ†PROGRAMMING/C & C++

 

1. ํฌ์ธํ„ฐ (pointer)

 

ํฌ์ธํ„ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ณ€์ˆ˜์ด๋‹ค.

์ฃผ์†Œ ๊ฐ’์„ ํ†ตํ•œ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ์„ ํ•œ๋‹ค. (๊ฐ„์ ‘ ์ฐธ์กฐ)

 

 


 

 

2. ๋ ˆํผ๋Ÿฐ์Šค (reference)

๋ ˆํผ๋Ÿฐ์Šค = ์ฐธ์กฐ์ž.  ( C++ ๋ฌธ๋ฒ• )

์ฐธ์กฐ์ž๋Š” ์ž์‹ ์ด ์ฐธ์กฐํ•˜๋Š” ๋ณ€์ˆ˜๋ฅผ ๋Œ€์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ๋˜ ํ•˜๋‚˜์˜ ์ด๋ฆ„์ด๋‹ค.

์ฆ‰, ๋ณ€์ˆ˜์— ๋ณ„๋ช…(๋ณ„์นญ)์„ ํ•˜๋‚˜ ๋ถ™์—ฌ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

๋ณ€์ˆ˜ ๋ช…์„ ํ†ตํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค. ( ์ง์ ‘ ์ฐธ์กฐ )

 

 

iNum์ด ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์ด๋ฉด,  rRef๋Š” iNum1์˜ ๋ณ„๋ช…(๋ณ„์นญ)์ด๋ผ๋Š” ๋œป์ด๋‹ค.

iNum๊ณผ rRef๋Š” ๋™์ผํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ฐธ์กฐํ•œ๋‹ค.

 

 


 

 

3. ํฌ์ธํ„ฐ์™€ ๋ ˆํผ๋Ÿฐ์Šค์˜ ์ฐจ์ด

 

1. NULL ์ดˆ๊ธฐํ™”

ํฌ์ธํ„ฐ๋Š” NULL ์ดˆ๊ธฐํ™”๋ฅผ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ ˆํผ๋Ÿฐ์Šค๋Š” NULL ์ดˆ๊ธฐํ™”๋ฅผ ํ•  ์ˆ˜ ์—†๋‹ค.

๋ ˆํผ๋Ÿฐ์Šค๋Š” ๋ฐ˜๋“œ์‹œ ์„ ์–ธ๊ณผ ๋™์‹œ์— ์ดˆ๊ธฐํ™”๋ฅผ ํ•ด์•ผํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ํŠน์„ฑ ๋•Œ๋ฌธ์—, ํฌ์ธํ„ฐ๋Š” ๊ฐ€๋ฆฌํ‚ฌ ๋Œ€์ƒ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ ˆํผ๋Ÿฐ์Šค๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

 

2. ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์˜ ์†Œ๋ชจ

 

ํฌ์ธํ„ฐ๋Š” ์ฃผ์†Œ ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋ณ„๋„์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์†Œ๋ชจํ•œ๋‹ค.

๋ฐ˜๋ฉด, ๋ ˆํผ๋Ÿฐ์Šค๋Š” ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ฐธ์กฐํ•˜๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์†Œ๋ชจํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

 

3. call by pointer / call by reference

 

call by pointer

๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ํ•จ์ˆ˜ ์ธ์ž ์ „๋‹ฌ ์‹œ, 

๋ฉ”๋ชจ๋ฆฌ ์†Œ๋ชจ๊ฐ€ ์ผ์–ด๋‚˜๊ณ , ๊ฐ’ ๋ณต์‚ฌ๊ฐ€ ๋ฐœ์ƒ๋œ๋‹ค.

 

call by reference

๋ฉ”๋ชจ๋ฆฌ ์†Œ๋ชจ๊ฐ€ ์—†๊ณ , ๊ฐ’ ๋ณต์‚ฌ ๋˜ํ•œ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค.