์ฐธ๊ณ ์ฌ์ดํธ
• ์๋ ์ฝ๋ฉ๋์ ํฐ์คํ ๋ฆฌ
๐ซต๐ป ํฌ์ธํฐ
๋ณ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ์ด๋ผ๊ณ ์์ ๊ฒ์๊ธ์์ ์ค๋ช ํ์๋ค.
์ด๋, ๋ด๊ธฐ๋ ๊ณต๊ฐ์ ์ปดํจํฐ์ ๋ฉ๋ชจ๋ฆฌ์ด๋ฉฐ, ํด๋น ๋ณ์๋ ๋ฉ๋ชจ๋ฆฌ์์ ์ด๋์ ์์นํด์๋์ง ์ฃผ์๊ฐ์ ๊ฐ์ง๋ค.
๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ณ์๊ฐ ์๋ ๋ฉ๋ชจ๋ฆฌ์ ์์ ์ฃผ์๊ฐ์ ์ ์ฅํ๋ ๋ณ์๋ฅผ ํฌ์ธํฐ๋ผ๊ณ ํ๋ค.
โญ ํฌ์ธํฐ ์ ์ธ
ํฌ์ธํฐ ๋ณ์๋ ์ผ๋ฐ ๋ณ์์ฒ๋ผ ์ ์ธ๋๋ฉฐ, ์๋ฃํ๊ณผ ๋ณ์ ์ด๋ฆ ๋๋ ๊ทธ ์ฌ์ด์ ( * )์ด ๋ถ๋๋ค.
#include <iostream>
using namespace std;
int main() {
int v = 10;
//๋ฐฉ๋ฒ1
int* p_x = &v;
//๋ฐฉ๋ฒ2
int * p_y = &v;
//๋ฐฉ๋ฒ3
int *p_z = &v;
// ์ฌ๋ฌ ํฌ์ธํธ ์ ์ธ ์,
int *p1, *p2, *p3, p4
//์ด๋, p4๋ ๊ธฐ๋ณธ intํ ๋ณ์๊ฐ ๋๋ค.
return 0;
}
์ ์ธ ์, ์ฌ์ฉํ๋ ( * ) ์ ํด๋น ๋ณ์๊ฐ ํฌ์ธํฐ ๋ณ์์์ ์๋ ค์ฃผ๋ ์ญํ ์ด๊ณ ,
์๋ ๋ด์ฉ์ ์ญ์ฐธ์กฐ์ ์ฐ์ด๋ ( * )์ ์ฃผ์์ ๋ด๊ธด ๊ฐ์ ๊ฐ๋ฆฌํค๋ ์ญํ ์ด๋ค.
์ผ๋ฐ ๋ณ์์ ๋ง์ฐฌ๊ฐ์ง๋ก ํฌ์ธํฐ ๋ณ์๋ ์ ์ธ ์ ์ด๊ธฐํํ์ง ์์ผ๋ฉด ์ฐ๋ ๊ธฐ๊ฐ์ด ์กด์ฌํ๋ค.
๐ข ์ฃผ์์ฐ์ฐ์ (&) - address of operator
์ฃผ์์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณ์์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ํ์ธํ ์ ์๋ค.
#include <iostream>
using namespace std;
int main()
{
int a = 123;
cout << &a << endl;
return 0;
}
๊ทธ๋ฆฌ๊ณ ํด๋น ํ์ผ์ ๋๋ฒ๊น ํ๋ฉด ๋ฌด์์ํ 16์ง์์ ์ฃผ์๊ฐ์ด ์์ฑ๋๋ค.
# x86 ํ๊ฒฝ
00EFFB00
# x64 ํ๊ฒฝ
0000001A756FF854
Press any key to close this window . . .
ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋, ํด๋น ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ 123์ด๋ผ๋ ๊ฐ์ด ์กด์ฌํ๊ณ ์๋ ๊ฒ์ด๋ค.
๊ดํ๋ฌธ์ ์์ด ์ฐ๋ค๊ณ ๊ฐ์ ํด๋ณด์.
์ด๋,
• ๊ดํ๋ฌธ์ ๋ณ์๋ช ,
• ์์ ๊ฐ,
• ๋๋ก๋ช or์ฐํธ๋ฒํธ(์์ธ ์ข ๋ก๊ตฌ ํจ์๋ก 12 ๊ตญ๋ฆฝ๊ณ ๊ถ๋ฐ๋ฌผ๊ด or 03045)๋ ์ฃผ์๊ฐ์ ๊ฐ์ง๋ค.
์ฐ๋ฆฌ๋ ๋ณ์๋ช ๋ง์ผ๋ก ๊ดํ๋ฌธ์ ์ฝ๊ฒ ์์๋ณผ ์ ์์ง๋ง ์์น๋ ์ฝ๊ฒ ์ฐพ์ ์ ์๋ค.
๋ฐ๋ผ์ ๋๋ก๋ช ์ ํตํด์ ์ฐพ์๊ฐ ์ ์๊ฒ ๋๋๋ฐ
์ปดํจํฐ ๋ํ ๋ง์ฐฌ๊ฐ์ง์ด๋ค.
์ด๋ ๊ฒ๋๋ฉด ์ปดํจํฐ๋ ๋ ๋น ๋ฅธ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
์ด๋ป๊ฒ๋ณด๋ฉด ๋ณ์๋ช ์ ์น์ฌ์ดํธ์ IP๊ฐ์ ๋๋ฉ์ธ์ผ๋ก ํ ๋ฒ ๋ฎ๋ฏ์ด ์ฃผ์๊ฐ์ ์ฐ๋ฆฌ๊ฐ ์ฐ๊ธฐ ํธํ๊ฒ ์ด๋ฆ์ ์ง์ด์ฃผ๋๊ฑฐ๋ผ ์๊ฐํ๋ฉด ๋๋ค.
๐ซต๐ป ์ญ์ฐธ์กฐ ์ฐ์ฐ์ (*) - de-reference operator
์ญ์ฐธ์กฐ ์ฐ์ฐ์(*)๋ฅผ ํตํด ํน์ ์ฃผ์ ๊ฐ์ ์ ๊ทผํ ์ ์๋ค.
#include <iostream>
using namespace std;
int main()
{
int a = 123;
int *address_a = &a;
cout << *address_a << endl;
return 0;
}
๋ค์ ์ฝ๋๋ฅผ ๋๋ฒ๊น ํ๋ฉด
123
Press any key to close this window . . .
a๋ณ์์ ์ฃผ์๊ฐ์ ์กด์ฌํ๋ ๊ฐ์ด ์ถ๋ ฅ๋๋ค.
๐งฑ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ
์ฐ๋ฆฌ๋ a ๋ผ๋ ๋ณ์๋ฅผ ์์ฑ ํ, ๊ฐ์ ์ด๊ธฐํ ํ ํ, ํจ์์์ ํด๋น ๊ฐ์ ๋ณ๊ฒฝํด์ฃผ๋ ค๋ฉด return์ ํตํด์ ๊ฐ์ ๋ฐ์์์ผํ๋ค.
๊ทธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
#include <iostream>
using namespace std;
void printFunc(int a) {
cout << "-------------Func Address-------------" << endl;
cout << &a << endl;
}
int main()
{
int a = 12;
cout << "-------------Main Address-------------" << endl;
cout << &a << endl;
printFunc(a);
return 0;
}
mainํจ์์์์ a์ ์ฃผ์๊ฐ๊ณผ printFuncํจ์์์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ๊ฐ์ ์ฐ์ด๋ณด๋ฉด ๊ฐ์ ๊ฐ์ ๋ค๋ฃจ์ง๋ง ์ ํ ๋ค๋ฅธ ์ฃผ์๊ฐ์ด ์ ๋ฌ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
-------------Main Address-------------
00BCFC28
-------------Func Address-------------
00BCFB54
Press any key to close this window . . .
์ด๋ฅผ ํตํด, ํจ์์์ ์ฌ์ฉํ๊ธฐ ์ํด ๊ฐ์ ๊ฐ์ด์ง๋ง ์๋ก ๋ฉ๋ชจ๋ฆฌ์ ํ ๋นํด์ ์ฌ์ฉํ๋ ๊ฒ์ ์ ์ ์๋ค.
ํ์ง๋ง, ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ํด๋น ๊ฐ์ ์ง์ ์ ๊ทผํ ์ ์๋ค.
์ฐ์ ์ฃผ์๊ฐ์ด ์ ์ ๋ฌ๋๋์ง ํ์ธํด๋ณด์.
#include <iostream>
using namespace std;
void printAddressFunc(int *px) {
cout << "-------------Func Address-------------" << endl;
cout << px << endl;
}
int main()
{
int x = 5;
int *px = &x;
cout << "-------------Main Address-------------" << endl;
cout << px << endl;
printAddressFunc(pa);
return 0;
}
ํฌ์ธํฐ ๋ณ์๋ฅผ ์์ฑ ํ, ํด๋น ํฌ์ธํฐ ๋ณ์๋ฅผ ์ญ์ฐธ์กฐํ์ง ์๊ณ ํ๋ผ๋ฏธํฐ๋ก ๋๊ฒจ๋ณด์.
-------------Main Address-------------
00BCF904
-------------Func Address-------------
00BCF904
Press any key to close this window . . .
๊ฐ์ ๊ฐ์ ์ฃผ์๊ฐ ์ ๋ฌ๋๊ณ ์๋ค.
์ด์ ํด๋น ์ฃผ์๋ก ์ง์ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ์ฌ return ์์ด ๊ฐ์ ๋ฐ๊ฟ๋ณด์.
#include <iostream>
using namespace std;
void changeFunc(int *p) {
*p = 3;
cout << *p << endl;
}
int main()
{
int x = 5;
int *px = &x;
// ๋ณ๊ฒฝ ์ ์ถ๋ ฅ
cout << *px << endl;
// ๋ณ๊ฒฝ
changeFunc(px);
// ๋ณ๊ฒฝ ํ ์ถ๋ ฅ
cout << *px << endl;
return 0;
}
ํด๋น ๊ฐ์ ์ญ์ฐธ์กฐ ์ฐ์ฌ์๋ฅผ ํตํด 3์ผ๋ก ๋ณ๊ฒฝํด๋ณด๊ฒ ๋ค.
5
3
3
Press any key to close this window . . .
๋ณ๊ฒฝ ์ ์ 5๊ฐ ํจ์์์ 3์ผ๋ก ๋ณ๊ฒฝ๋๊ณ , return์ ํ์ง ์์์์๋ ํด๋น ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ์ ๋ค์ ์ถ๋ ฅํ๋ฉด 3์ด ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
'Language > C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ C++ ] ์ ์ถ๋ ฅ ๋ฐฉ์์ ๋ํด ์์๋ณด์. (0) | 2024.04.28 |
---|---|
[ C++ ] ๋ณ์์ ๋ํด ์์๋ณด์. (0) | 2024.04.01 |