[C++] Pointer ๐Ÿ†š Reference(์ฐธ์กฐ)

kihongsiยท2022๋…„ 5์›” 28์ผ
0

cpp

๋ชฉ๋ก ๋ณด๊ธฐ
1/1

C ์—๋Š” ํฌ์ธํ„ฐ๋ผ๋Š” ๊ฐœ๋…๋งŒ ์žˆ๋‹ค.
C++ ์—๋Š” ๋ ˆํผ๋Ÿฐ์Šค๋ผ๋Š” ๊ฐœ๋…์ด ๋“ฑ์žฅํ•œ๋‹ค.
๋น„์Šทํ•œ ์šฉ๋„ ๊ฐ™์ง€๋งŒ ์–ด๋–ค ์ฐจ์ด์ ์ด ์žˆ๋Š”์ง€ ์•„๋ผ๋ณด์ž

ํฌ์ธํ„ฐ == call by address

ํฌ์ธํ„ฐ ์‚ฌ์šฉ ์‹œ ์ฃผ์†Œ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. ์ „๋‹ฌ ๋ฐ›์€ ์ฃผ์†Œ๋ฅผ ํ†ตํ•ด ์ฃผ์†Œ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ํž™ ๊ณต๊ฐ„์— ๊ฐ€์„œ ๊ฐ’์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ฝ์„ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋ฅผ ์ „๋‹ฌํ•  ์‹œ ์ด๋Š” ์ฃผ์†Œ๊ฐ’์˜ ๋ณต์‚ฌ์ด๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ์†Œ๋ชจ๊ฐ€ ์ผ์–ด๋‚œ๋‹ค.
๋˜ํ•œ, ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋Œ€์ƒ(์ฃผ์†Œ) ์ž์ฒด๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜๋Š” ์—†๋‹ค.(๋”๋ธ” ํฌ์ธํ„ฐ ์‚ฌ์šฉํ•ด์•ผ ํ•จ)

๋˜ํ•œ, ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Null ํฌ์ธํ„ฐ์— ์ ‘๊ทผํ•˜๋ ค ํ•  ๋•Œ Null Pointer Exception, Segmentation Fault ๋“ฑ์˜ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.. ์„ธ๊ทธํดํŠธ๊ทนํ˜......!!!!!

๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค!

๋ ˆํผ๋Ÿฐ์Šค == call by reference

์ฐธ์กฐ์ž๋Š” ์ž์‹ ์ด ์ฐธ์กฐํ•˜๋Š” ๋ณ€์ˆ˜๋ฅผ ๋Œ€์‹ ํ•˜๋Š” ๋˜ ํ•˜๋‚˜์˜ ์ด๋ฆ„, ๋ณ„๋ช… ์—ญํ• ์„ ํ•œ๋‹ค.
๋ ˆํผ๋Ÿฐ์Šค๋Š” ํฌ์ธํ„ฐ์™€ ๋™์ผํ•œ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ, ์ฐธ์กฐ ๋Œ€์ƒ ํ• ๋‹น๊ณผ ์ ‘๊ทผ ๋ฐฉ์‹์— ์žˆ์–ด์„œ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

int i = 1;
int *p = &i; // ์ฃผ์†Œ๊ฐ’ ํ• ๋‹น
int &r = i;	// ์ง์ ‘ ํ• ๋‹น

๋ ˆํผ๋Ÿฐ์Šค๋Š” ์›๋ณธ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์˜ ์œ„์น˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.
ํฌ์ธํ„ฐ์˜ ์•ˆ์ „ํ•œ ๋ฒ„์ „(?)์ธ ์…ˆ์ด๋‹ค.

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

*& ????

์„ ์–ธ ์‹œ ์‚ฌ์šฉ๋˜์—ˆ๋‹ค๋ฉด ํฌ์ธํ„ฐ์˜ ๋ ˆํผ๋Ÿฐ์Šค์ด๋‹ค.

int *&a;	// reference of pointer
int b = 1;
*&b = 2;	// *&b == b

0๊ฐœ์˜ ๋Œ“๊ธ€