Data Structure and Pointer
์๋ฃ๊ตฌ์กฐ์ ํฌ์ธํฐ (์ถ์ ๋น๋: ์)
๋น์ถํ๊ทธ: ๋ฐฐ์ด, ํฌ์ธํฐ, ํฌ์ธํฐ ์ฐ์ฐ
1. ๋ฐฐ์ด๊ณผ ๊ตฌ์กฐ์ฒด
๋ฐฐ์ด ํน์ง
- ํ๋์ ์๋ณ์๋ก ๋์ผํ ํ์์ ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃธ
- ๊ฐ์ ํฌ๊ธฐ์ ๊ฐ์ ํ์ ์ ๊ณต๊ฐ์ด ์ฐ์์ ์ผ๋ก ํ ๋น
- ๊ฐ์ ํฌ๊ธฐ๋ ๋ค๋ฅผ ์ ์์ง๋ง ๋ฐ์ดํฐ ํ์ ์ ๊ฐ์์ผ ํจ
๋ฐฐ์ด ์ ์ธ๊ณผ ์ด๊ธฐํ
- ๋ฐฐ์ด ์ ์ธ:
<์๋ฃ๋ช > <๋ฐฐ์ด๋ช >[<ํฌ๊ธฐ>];
- ๋ฐฐ์ด ์ด๊ธฐํ: ์ค๊ดํธ๋ก ์ ์ฒด ์ด๊ธฐํ ๊ฐ๋ฅ
์์:
int ar1[4] = {2,4,5,3};
int ar2[4] = {0,0,0,0};
int ar3[4] = {0}; // ์ ์ฒด 0์ผ๋ก ์ด๊ธฐํ
๋ฐฐ์ด์ ์ฌ์ฉ
- ์ฃผ์ ์์ํ ๋ฐ์ดํฐ: ๋ฐฐ์ด์ด๋ฆ
- ๋ฐฐ์ด๋ช ์ ์ฒซ๋ฒ์งธ ์์์ ์์น๊ฐ์ ๊ฐ์ง
- ๋ฐฐ์ด์ ๋ฐฐ์ด๋ช ์ ๊ธฐ์ค์ผ๋ก ์ฒจ์(Index)๋ฅผ ํตํด ๋ฐ์ดํฐ์ ์ ๊ทผํจ
2์ฐจ์ ๋ฐฐ์ด
int arr[2][3] = {1,2,3,4,5,6}; // 1,2,3์ด 1ํ, 4,5,6์ด 2ํ
int arr[2][3] = {{ 1,2 }, { 4,5 }}; // 1,2๊ฐ 1ํ 4,5๊ฐ 2ํ
๊ตฌ์กฐ์ฒด
- ์ฌ์ฉ์์ ์ ์๋ฃํ(๊ตฌ์กฐํ)
- ๊ธฐ๋ณธ ์๋ฃํ์ผ๋ก ์๋ก์ด ์๋ฃํ์ ๋ง๋ฆ
- ๊ทธ๋ฃน์ผ๋ก ๊ด๋ฆฌํ ์ ์๊ณ ์ ์ธํ๊ธฐ ์ ์ ์ ์ํด์ผ ํจ
- ๊ตฌ๋ฌธ:
<struct> <๊ตฌ์กฐ์ฒด ํ์ ๋ช > { <๋ณ์์ ์ธ> [, ...]};
<๊ตฌ์กฐ์ฒด ๋ณ์๋ช >.<๋ด๋ถ ๋ณ์๋ช >
์ผ๋ก ๋ถ๋ฌ์ด
2. ํฌ์ธํฐ
๊ธฐ๋ณธ ๊ฐ๋
- ์ฃผ์๊ฐ์ ํตํด์ ํน์ ๋ฐ์ดํฐ์ ์ ๊ทผํจ
- ์ฐธ์กฐ์ ์ํ ํธ์ถ
- ์ฐ์ฐ์:
&
: ์ฃผ์๊ฐ ๋์ถ*
: ํด๋น์์น๋ก ์ ๊ทผ
- ํฌ์ธํฐ ๋ณ์:
<์ฐธ์กฐํ ์๋ฃํ> *<๋ณ์๋ช >;
์์:
int data = 10;
int *p;
p = &data;
*p = 20;
printf("%d %d", data, *p);
์ฐธ์กฐ์ ์ํ ์ ๋ฌ(Call By Reference)
- ์ฐธ์กฐ(์์น)๊ฐ์ ์ ๋ฌํด์ ๋ฐ์ดํฐ ์๋ณธ์ ๊ฐ๊ณตํจ
์์:
void fa(int x, int *y) // ์ฐธ์กฐ๊ฐ์ ์ ๋ฌ๋ฐ๋ ๋ณ์๋ ํฌ์ธํฐ ๋ณ์๋ก ์ ์ธ
// n๊ณผ x๋ ๋
๋ฆฝ์ . k์ *y๋ ๊ฐ์
{
x = x + 5;
*y = *y + 5; // y๊ฐ ๊ฐ๋ฆฌํค๋ ๋ณ์ k๊ฐ 5์ฆ๊ฐ
return;
}
int main()
{
int n = 10, k = 20;
fa(n, &k); // n์ ๊ฐ ๋ณต์ฌ ์ ๋ฌ, k๋ ์ฐธ์กฐ๊ฐ ์ ๋ฌ
printf("%d %d", n, k);
return 0;
}
// ๊ฒฐ๊ณผ: 10 25
ํฌ์ธํฐ ์ฐ์ฐ
- ์ฃผ์๊ฐ์ ๊ฐ๊ฐ(๋ํ๊ธฐ, ๋นผ๊ธฐ)ํ๋ ๊ฒฝ์ฐ ํ์ ํฌ๊ธฐ๋ฅผ ๊ณฑํ ๊ฐ์ผ๋ก ์ฆ๊ฐ๋จ
- ๋ฐฐ์ด ์ฃผ์๋ฅผ ํฌ์ธํฐ ๋ณ์์ ํ ๋นํ๋ฉด ํฌ์ธํฐ ์ญ์ ๋ฐฐ์ด์ฒ๋ผ ์ฌ์ฉ ๊ฐ๋ฅ
์์:
int ar[5] = {1,2,3,4,5};
int *p = ar; // ํฌ์ธํฐ ๋ณ์ p์ ๋ฐฐ์ด ar ์ฃผ์๊ฐ ํ ๋น
printf("%d\n", p[2]);
printf("%d\n", *(p+2)); // p[2]์ ๊ฐ์
printf("%d\n", *(ar+2)); // *(p+2)์ ๊ฐ์
2์ฐจ์ ๋ฐฐ์ด๊ณผ ํฌ์ธํฐ
- ๋ฐ์ดํฐ ํ์ ๊ณผ ํจ๊ป ๋ฐฐ์ด์ ๊ธธ์ด๋ ๊ณ์ฐ์ ํฌํจ๋์ด์ผ ํจ
- ๊ตฌ๋ฌธ:
<์ฐธ์กฐํ ์๋ฃํ> (*<๋ณ์๋ช >)[<2์ฐจ์ ๋ฐฐ์ด ํฌ๊ธฐ>];
์์:
int arr[2][3] = {1,2,3,4,5,6};
int (*p)[3] = arr; // p์ 2์ฐจ์ ๋ฐฐ์ด์ฃผ์๊ฐ ํ ๋น
printf("%d, ", *(p[1]+2)); // p[1][2] ์์น
printf("%d", *(*(p+1)+0)); // p[1][0] ์์น
// ๊ฒฐ๊ณผ: 6 4