์ž๋ฃŒ๊ตฌ์กฐ์™€ ํฌ์ธํ„ฐ (์ถœ์ œ๋นˆ๋„: ์ƒ)

๋นˆ์ถœํƒœ๊ทธ: ๋ฐฐ์—ด, ํฌ์ธํ„ฐ, ํฌ์ธํ„ฐ ์—ฐ์‚ฐ

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