#include <stdio.h>
int* add(int a, int b)
{
int result = a + b;
return &result;
}
int main(void)
{
int* result = add(5, 6);
add(8, 7);
printf("%d", *result);
}
์ฝ์์ ์ถ๋ ฅ๋๋ ๊ฐ๊ณผ ๊ทธ ์ด์ ๋ฅผ ์ค๋ช ํด ์ฃผ์ธ์!
#include <stdio.h>
int* add(int a, int b)
{
int result = a + b;
return &result;
}
int main(void)
{
int* result = add(5, 6);
add(8, 7);
printf("%d", *result);
}
์ฝ์์ ์ถ๋ ฅ๋๋ ๊ฐ๊ณผ ๊ทธ ์ด์ ๋ฅผ ์ค๋ช ํด ์ฃผ์ธ์!
์์ ํ๋
์๋ฝ ใ ใ ใ !
์๋ชป๋์ฃผ์์ฌ์ ํฐ์ง๊ฑฐ๋ ์๋๋ฉด 15
๋ฆด๋ฆฌ์ฆ๋น๋์ผ๋ 15 ๋์ฌ๊ฑฐ๊ฐ๊ณ ๋๋ฒ๊ทธ๋น๋์ผ๋ ํฐ์ง๊ฒ๊ฐ์๋๋
15๋ผ ์๊ฐํ ์ด์ ๋ add๋ด๋ถ ์ง์ญ๋ณ์ result์ ์ฃผ์๊ฐ ๋ณต์ฌํ๊ฑฐ์ ์ญ์ถ์ ํ ์ํฉ์ธ๋ฐ, ์ง์ญ๋ณ์๊ฐ ์ฌ๋ผ์ง๊ณ ์๊ธฐ๊ณ ๋ ์ฌ์ค์ x86๊ธฐ์ค์ผ๋ก esp, 64๋นํธ ๊ธฐ์ค์ผ๋ก rsp๊ฐ์ด ์ค๋ฅด๊ณ ๋ด๋ฆฌ๊ณ ์ ๋ฌ๋ ค์๋๊ฑฐ๋ผ ๊ทธ ํจ์์ง์ ํ์๋ ์คํํฌ์ธํฐ๊ฐ ์ค๋ฅด๋ ๋ด๋ฆฌ๋ ๋์ผํ ํจ์์์์ ์งํ๋๋๊ฑฐ๋ผ add๊ฐ ๋๋ฒ ์คํ๋์๋ค๋ฉด ์ต์ข ์ ์ผ๋ก ๋ง์ง๋ง์ ์คํ๋ add๊ธฐ์ค
์ผ๋ก ๊ทธ ๊ฐ์ด ๋ฎ์ฌ์ ธ์์๊ฑฐ๋ผ๊ณ ํ๋จํ์
15์ธ๊ฑด ๋ง๋๋ฐ '์คํํฌ์ธํฐ๊ฐ ์ค๋ฅด๋ ๋ด๋ฆฌ๋ ๋์ผํ ํจ์' ๋ ํ๋ ธ์ . add ๋ณ์์์ result ๋ณ์๊ฐ ๋ง๋ค์ด์ง๋ฉด ์คํ ๋ฉ๋ชจ๋ฆฌ์ ํ ๋น๋๋ฉด์ main ์ result ๋ณ์์ ์ง์ญ ๋ณ์ result์ ์ฃผ์๊ฐ์ return ๊ฐ์ผ๋ก ๋๊ฒจ์ฃผ๋ฉด์ ์คํ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋๋๋ฐ ํด์ ๋๋ main์ result๋ณ์์๋ ๊ทธ ์ฃผ์๊ฐ์ด ๋จ์์์ ๊ทธ ์ํ์์ ๋ค์ add ํจ์๋ฅผ ์คํํด์ ์ง์ญ๋ณ์ result๊ฐ์ด ์คํ ๋ฉ๋ชจ๋ฆฌ์ ์์ด๊ณ ๊ทธ ๋ฉ๋ชจ๋ฆฌ์ 15 ๋ผ๋ ๊ฐ์ด ํ ๋น๋๊ณ ์ด์ ํจ์๊ฐ ๋์ค๋ฉด์ ์คํ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋๋๋ฐ C์ธ์ด๋ ์คํ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋๋ ๊ฐ์ ๋จ์์๊ธฐ๋๋ฌธ์ ๊ทธ ์ํ์์ result ์ฃผ์์ ๊ฐ์ ์ญ์ฐธ์กฐํ๋ฉด 15 ๋ผ๋ ๊ฐ์ด ๋์ค๋๊ฑฐ ๋ญ๊ฐ ์ข ๊ธธ์๋๋ฐ ๋์ถฉ ๋งํ๋ฉด
์คํ ๋ฉ๋ชจ๋ฆฌ์์ ํด์ ๋ ๋ ๊ทธ ์ฃผ์์ ์๋ ๊ฐ์ ๊ทธ๋๋ก ์๊ธฐ๋๋ฌธ์ ํด์ ๋ ์ฃผ์์ ๊ฐ์ ์ ๊ทผํ๋๋ ์ด๊ธฐํ ์๋ 15๊ฐ์ด ์์ผ๋ ๊ทธ๊ฑธ ๊ฐ์ ธ์ค๋๊ฑฐ์ฃ
๋ด๊ฐ๋งํ๋ ์คํํฌ์ธํฐ๊ฐ ์ค๋ฅด๋ ๋ด๋ฆฌ๋ ์ด๋ผ๋ ์๋ฏธ๋ ์ค์ฌ์ ํจ์์ฝ์ด๋ผ๋ ์๋ฏธ์๊ธดํจ.
์คํํฌ์ธํฐ๋ ์ง์คํฐ๊ฐ์ ๋ณ๊ฒฝ์ด ์ค์ ์คํ์ ์๋ ๊ฐ์๋ ์ํฅ ์์ค๋ค ๋ผ๊ณ ์๊ธฐํ์ผ๋ฉด ๋ ๊น๋ํ ์ค๋ช ์ด๊ธดํ๊ฒ๋ค ๋ณด๋๊น
๋์ผํ ํจ์์ฝ์ 2๋ฒํ๊ธฐ๋๋ฌธ์๋ผ๊ณ ๋งํ์ด์ผํ๋๋ฐ ๋ง์ฃผ๋ณ์ด์์ด์ ์คํํฌ์ธํฐ๊ฐ ์ค๋ฅด๋ ๋ด๋ฆฌ๋ ๋์ผํ ํจ์๋ผ๊ณ ํํํ๋ฏ
๋์ผํ ํจ์์ฝ์ 2๋ฒํ๋ค๊ธฐ ๋ณด๋จ add(8,7) ๊ฐ ์๋๋ผ ์๋ก์ด add2(8,7) ๋ก ํธ์ถํด๋ ๊ฐ์ ๊ฐ์ด ๋์์ ๋์ผํ ํจ์์ฝ ๋๋ฌธ์ ์๋ ๊ทธ๋ฅ ๊ทธ ์คํ๋ฉ๋ชจ๋ฆฌ์ result = 11 ๋ผ๋๊ฒ ํ ๋น๋๊ณ ๋น ์ ธ๋๊ฐ๊ณ ๋ค์ ๊ทธ ์์น์ ํ ๋น์ด ๋๊ฑฐ
"๋์ผํ ํจ์์ฝ์ด๊ธฐ๋๋ฌธ์"๋ผ๋ ๋ถ๋ถ์ด ๋ด ํต์ฌ๋ต๋ณ์ ์๋๊ณ ๊ทธ๋ฅ ๋ด๊ฐ ์ ์ ํ๋ถ๋ถ์. add๊ฐ ๋๋ฒ ๋ถ๋ฆฐ๊ฒ ์๋๋ผ add ํ๋ฒ ๋ถ๋ฅด๊ณ ์ง์ญ๋ณ์๋ฅผ ๋ค๋ฅธ ์๋ฃํ๊ฐ์ผ๋ก ์ค์ ํ ๋ค๋ฅธ ํจ์๋ฅผ๋ถ๋ ์ผ๋ฉด ๋ ๊ผฌ์์๊ฑฐ๊ฐ์ผ๋
main result๊ฐ ๊ฐ์ง๊ณ ์๋ ์ฃผ์ ๊ฐ์ด ๋ค๋ฅธ ์๋ฃํ์ด๋ฉด ๊ทธ๋ฅ ๋นํธ ํจํด์ด ๋ค๋ฅด๊ธฐ๋๋ฌธ์ ๊นจ์ ธ์ ๋ค์ด์ค๊ฒ ์ง ์ฐ๋ ๊ธฐ๊ฐ์ฒ๋ผ ๊ทผ๋ฐ ์ด๊ฒ ๋ฌธ์ ํ๊ณค ๊ด๋ จ์ด ์์ด์.. ์ฌ์ค ์คํ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋ฐฉ์๊ณผ ํฌ์ธํฐ ์ฃผ์๊ฐ์ ๋ํ ๋ฌธ์ ๋ผ ์๋ฌดํผ ๊ฑฐ์ ๋น์ทํ๋ค!!
์ฌ์ค ๊ทธ๋ฅ ์กด๋ ๋น์ฐํ๊ฑฐ๊ธดํ์ง. ์คํ ๋ฉ๋ชจ๋ฆฌ๊ฐ์์ฒด๋ ์คํํฌ์ธํฐ๊ฐ ์ํฅ์ค์์์ผ๋๊น. ๊ทธ๋ฅ ์ด๊ฑธ ์ด๋์๋ถํฐ ์ค๋ช ํด์ผํ ์ง ๋ชฐ๋ผ์ ๋์ถฉ ์ฅํฉํ๊ฒ ์ค๋ช ํ๋ค๊ฐ ์ข ๋ฏธ์ค๋๋ฏ
๊ทธ๋ฅ ์ต๋ํ ์ด๋ ต๊ฒ ๋ผ๋ ค๋ฉด ๋ค๋ฅธ ์๋ฃํ๊ฐ๊น์ง ๋ด๋ฒ๋ ค์ ๊ทธ ๋นํธ ๋ถ๋ฌ์จ ๊ฐ๊น์ง ๊ณ์ฐ์ํค๋ฉด ๊ด์ฐฎ์๊ฒ ๋ค ์ถ์ด์ ๋งํ๊ฑฐ์
๊ทธ๋ผ printf์์ %d๋จ์๋ 4๋ฐ์ดํธ๊ฐ์ ๋ง์ถฐ์ ๊ทธ ํจ์์ ์ง์ญ๋ณ์๊ฐ 8๋ฐ์ดํธ์ง๋ฆฌ๋ฉด x86ํ๊ฒฝ์ด๋ฉด ๋ฆฌํ์๋์ ๋น ์๋์๊น์ง ์ ๊ฒฝ์จ์ผํ๋ ๋ณต์กํ๊ฒ ๋ผ์์์๊ฑฐ๊ฐ์์ด
110.70์ด ์ ์ดํดํ๊ณ ์๊ตฌ๋ง ๊ธ์ด์ด๋ ๋ญ๊ฐ ํจ๋ฐฐํ ๋๋์ ์ธ์ ํ๊ธฐ ์ซ์ดํ๋๋๋ใ ใ ใ ใ ใ
๋ฑํ ... '๋์ผํ ํจ์์ฝ', '์คํ์ด ์ค๋ฅด๋ ๋ด๋ฆฌ๋ ๋์ผ ํจ์', ๋ค๋ฅธ๋ถ๋ถ์ ๊ฑฐ์๋ค ์ด๋์ ๋ ๋ง์ง๋ง ์ด ๋๊ฐ์ง ์ด์ ๋ผ๊ณ ๋งํด๊ฐ์ง๊ณ ๋ด๊ฐ ๋ธ ๋ฌธ์ ์์ ๋์ฌ์๊ฐ์๋ ์ด์ ๊ฐ ๋๋ฌธ์ ์ ์ ํ๊ฑด๋ ..
110 70 ๊ฐ ์์๋๊ฑด ๋๋ ์๋๋ฐ, ์ ์๋๊ฑฐ๋ ๊ทธ๊ฑธ ์ค๋ช ํ๋ ๊ฑฐํ๊ณค ๋ค๋ฅด์ง, 110 70๊ฒ์ด๋ ๋ณธ์ธ๋ ๋ง์ฃผ๋ณ์ด ์ ์ด์ ๋ฏธ์ค๋ฌ๋ค๊ณ ๊น์งํ๋๋ฐ ์๊ทธ๋ฌ๋.. ๋ด๊ฐ ์ค๋ช ํ ๋ ์ข ๊พธ๊ฒจ ๋ฃ์ผ๋ฉด์ ์ค๋ช ํ๋ ๋๋์ด๋ผ ๋ญ๊ฐ ํ๋ด๋๊ฒ๊ฐ์ด ๋ณด์์ ์ง์ก
14.89762
๋๋ง 11 ์๊ฐํ๋
์๋๋ฉด ๋์ ํ ๋น ์๋๋ผ์ ๋ฐํํ๊ฑฐ ์ฐธ์กฐํ ๋ ์ด์ํ๊ฒ ํฐ์ง๋?
์ ๊ทธ๋ฅ ๋๊ธ๋งํฌ์ธํฐ์ธ๊ฐ
ใ ใ ใ ใ ใ ์ ํจํ์ง ์์ ์ฃผ์์ ์ ๊ทผํ๊ณ ์์ผ๋๊น ๋๊ธ๋ง ํฌ์ธํฐ์ง