๐Ÿš€ ํฌ์ธํ„ฐ์™€ ๋ฐฐ์—ด์˜ ๊ด€๊ณ„: C ์–ธ์–ด์˜ ํ•ต์‹ฌ์„ ํŒŒํ—ค์น˜์ž! ๐ŸŽฏ

์ฝ˜ํ…์ธ  ๋Œ€ํ‘œ ์ด๋ฏธ์ง€ - ๐Ÿš€ ํฌ์ธํ„ฐ์™€ ๋ฐฐ์—ด์˜ ๊ด€๊ณ„: C ์–ธ์–ด์˜ ํ•ต์‹ฌ์„ ํŒŒํ—ค์น˜์ž! ๐ŸŽฏ

 

 

์•ˆ๋…•, ์นœ๊ตฌ๋“ค! ์˜ค๋Š˜์€ C ์–ธ์–ด์˜ ํ•ต์‹ฌ ๊ฐœ๋…์ธ 'ํฌ์ธํ„ฐ์™€ ๋ฐฐ์—ด์˜ ๊ด€๊ณ„'์— ๋Œ€ํ•ด ๊นŠ์ด ํŒŒ๊ณ ๋“ค์–ด๋ณผ ๊ฑฐ์•ผ. ์ด ์ฃผ์ œ๋Š” ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ์—์„œ ์ •๋ง ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ด๋‹ˆ๊นŒ, ์ง‘์ค‘ํ•ด์„œ ๋“ค์–ด๋ด! ๐Ÿ˜Š

์šฐ๋ฆฌ๊ฐ€ ๋ฐฐ์šธ ๋‚ด์šฉ์€ ์žฌ๋Šฅ๋„ท์˜ '์ง€์‹์ธ์˜ ์ˆฒ' ๋ฉ”๋‰ด์— ๋“ฑ๋ก๋  ๊ฑฐ์•ผ. ํ˜น์‹œ ๋ชจ๋ฅด๋Š” ์นœ๊ตฌ๋“ค์„ ์œ„ํ•ด ๋งํ•˜์ž๋ฉด, ์žฌ๋Šฅ๋„ท์€ ๋‹ค์–‘ํ•œ ์žฌ๋Šฅ์„ ๊ฑฐ๋ž˜ํ•˜๋Š” ๋ฉ‹์ง„ ํ”Œ๋žซํผ์ด์•ผ. ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๊ฐ€ ๋ฐฐ์šฐ๋Š” C ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ง€์‹๋„ ํ›Œ๋ฅญํ•œ ์žฌ๋Šฅ์ด ๋  ์ˆ˜ ์žˆ์ง€. ์ž, ์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ์‹œ์ž‘ํ•ด๋ณผ๊นŒ?

๐Ÿ” ํฌ์ธํ„ฐ์™€ ๋ฐฐ์—ด, ๋ญ๊ฐ€ ๋‹ค๋ฅผ๊นŒ?

ํฌ์ธํ„ฐ์™€ ๋ฐฐ์—ด์€ ์–ผํ• ๋ณด๋ฉด ๋น„์Šทํ•ด ๋ณด์ด์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ๊ฝค ๋‹ค๋ฅธ ๊ฐœ๋…์ด์•ผ. ํ•˜์ง€๋งŒ ๋‘˜ ์‚ฌ์ด์—๋Š” ๋ฐ€์ ‘ํ•œ ๊ด€๊ณ„๊ฐ€ ์žˆ์–ด. ์ด ๊ด€๊ณ„๋ฅผ ์ดํ•ดํ•˜๋ฉด C ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ง„์ •ํ•œ ๊ณ ์ˆ˜๊ฐ€ ๋  ์ˆ˜ ์žˆ์„ ๊ฑฐ์•ผ!

1. ํฌ์ธํ„ฐ์˜ ๊ธฐ๋ณธ ๊ฐœ๋… ๐ŸŽˆ

๋จผ์ € ํฌ์ธํ„ฐ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ํฌ์ธํ„ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜์•ผ. ์‰ฝ๊ฒŒ ๋งํ•ด, ๋‹ค๋ฅธ ๋ณ€์ˆ˜๊ฐ€ ์–ด๋””์— ์žˆ๋Š”์ง€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์—ญํ• ์„ ํ•ด.

ํฌ์ธํ„ฐ๋Š” C ์–ธ์–ด์—์„œ ์•„์ฃผ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์•ผ. ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ง์ ‘ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๊ฑฐ๋“ .

ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ๋Š” ์ด๋ ‡๊ฒŒ ํ•ด:

int *ptr;

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ptr์ด๋ผ๋Š” ์ด๋ฆ„์˜ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๊ฐ€ ์ƒ๊ฒจ. ์ด ๋ณ€์ˆ˜๋Š” int ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ์–ด.

๐Ÿ’ก ํฌ์ธํ„ฐ ์‚ฌ์šฉ ํŒ:

  • ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ ์•ž์˜ *๋Š” "ํฌ์ธํ„ฐ"๋ฅผ ์˜๋ฏธํ•ด.
  • ๋ณ€์ˆ˜ ์•ž์— &๋ฅผ ๋ถ™์ด๋ฉด ๊ทธ ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์–ด.
  • ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ์ฃผ์†Œ์— ์žˆ๋Š” ๊ฐ’์„ ์–ป์œผ๋ ค๋ฉด *๋ฅผ ์‚ฌ์šฉํ•ด.

์ž, ์ด์ œ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด๋ณด์ž:

int num = 42;
int *ptr = #

printf("num์˜ ๊ฐ’: %d\n", num);
printf("num์˜ ์ฃผ์†Œ: %p\n", (void*)&num);
printf("ptr์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’: %d\n", *ptr);
printf("ptr์— ์ €์žฅ๋œ ์ฃผ์†Œ: %p\n", (void*)ptr);

์ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, num์˜ ๊ฐ’๊ณผ ์ฃผ์†Œ, ๊ทธ๋ฆฌ๊ณ  ptr์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’๊ณผ ptr์— ์ €์žฅ๋œ ์ฃผ์†Œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์–ด. ์‹ ๊ธฐํ•˜์ง€? ๐Ÿ˜ฒ

2. ๋ฐฐ์—ด์˜ ๊ธฐ๋ณธ ๊ฐœ๋… ๐Ÿ“š

์ด์ œ ๋ฐฐ์—ด์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ๋ฐฐ์—ด์€ ๊ฐ™์€ ํƒ€์ž…์˜ ๋ณ€์ˆ˜ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์•ผ.

๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด. ํŠนํžˆ ๊ฐ™์€ ์ข…๋ฅ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŽ์ด ๋‹ค๋ฃฐ ๋•Œ ์œ ์šฉํ•˜์ง€.

๋ฐฐ์—ด์„ ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ด๋ž˜:

int numbers[5];

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด 5๊ฐœ์˜ int ํƒ€์ž… ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฐ์—ด์ด ์ƒ๊ฒจ. ๊ฐ ์š”์†Œ์— ์ ‘๊ทผํ•  ๋•Œ๋Š” ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ด:

numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;
numbers[3] = 40;
numbers[4] = 50;

๐ŸŒŸ ๋ฐฐ์—ด ์‚ฌ์šฉ ํŒ:

  • ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด.
  • ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ๋„˜์–ด์„œ๋Š” ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์œ„ํ—˜ํ•ด!
  • ๋ฐฐ์—ด ์ด๋ฆ„ ์ž์ฒด๋Š” ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ์˜ ์ฃผ์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด.

์ž, ์ด์ œ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•œ ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ๋ฅผ ๋ณผ๊นŒ?

int numbers[5] = {10, 20, 30, 40, 50};

for(int i = 0; i < 5; i++) {
    printf("numbers[%d] = %d\n", i, numbers[i]);
}

์ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๊ฐ€ ์ถœ๋ ฅ๋  ๊ฑฐ์•ผ. ์‰ฝ์ง€? ๐Ÿ˜Š

3. ํฌ์ธํ„ฐ์™€ ๋ฐฐ์—ด์˜ ๊ด€๊ณ„: ๋น„๋ฐ€์˜ ๋ฌธ์„ ์—ด์ž! ๐Ÿ”‘

์ž, ์ด์ œ ์šฐ๋ฆฌ์˜ ์ฃผ์ธ๊ณต์ธ 'ํฌ์ธํ„ฐ์™€ ๋ฐฐ์—ด์˜ ๊ด€๊ณ„'์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ ์‹œ๊ฐ„์ด์•ผ. ์ด ๋‘˜์€ ์ƒ๊ฐ๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ€๊นŒ์šด ์‚ฌ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์–ด.

C ์–ธ์–ด์—์„œ ๋ฐฐ์—ด ์ด๋ฆ„์€ ์‚ฌ์‹ค ํฌ์ธํ„ฐ์•ผ! ์ •ํ™•ํžˆ ๋งํ•˜๋ฉด, ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ์ง€.

์ด๊ฒŒ ๋ฌด์Šจ ๋ง์ธ์ง€ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด์ž:

int numbers[5] = {10, 20, 30, 40, 50};
int *ptr = numbers;  // ๋ฐฐ์—ด ์ด๋ฆ„์„ ํฌ์ธํ„ฐ์— ๋Œ€์ž…

printf("numbers[0] = %d\n", numbers[0]);
printf("*ptr = %d\n", *ptr);

printf("numbers[2] = %d\n", numbers[2]);
printf("*(ptr + 2) = %d\n", *(ptr + 2));

์ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, numbers[0]๊ณผ *ptr์ด ๊ฐ™์€ ๊ฐ’(10)์„ ์ถœ๋ ฅํ•˜๊ณ , numbers[2]์™€ *(ptr + 2)๋„ ๊ฐ™์€ ๊ฐ’(30)์„ ์ถœ๋ ฅํ•  ๊ฑฐ์•ผ.

โš ๏ธ ์ฃผ์˜ํ•  ์ :

๋ฐฐ์—ด ์ด๋ฆ„์ด ํฌ์ธํ„ฐ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜์ง€๋งŒ, ๋ฐฐ์—ด ์ด๋ฆ„์— ๋‹ค๋ฅธ ์ฃผ์†Œ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜๋Š” ์—†์–ด. ์ฆ‰, numbers = &someVariable; ๊ฐ™์€ ์ฝ”๋“œ๋Š” ์ปดํŒŒ์ผ ์—๋Ÿฌ๋ฅผ ์ผ์œผํ‚ฌ ๊ฑฐ์•ผ.

๐Ÿง  ํฌ์ธํ„ฐ ์—ฐ์‚ฐ๊ณผ ๋ฐฐ์—ด ์ธ๋ฑ์‹ฑ

ํฌ์ธํ„ฐ์™€ ๋ฐฐ์—ด์˜ ๊ด€๊ณ„๋ฅผ ๋” ๊นŠ์ด ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด, ํฌ์ธํ„ฐ ์—ฐ์‚ฐ๊ณผ ๋ฐฐ์—ด ์ธ๋ฑ์‹ฑ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

ํฌ์ธํ„ฐ์— ์ •์ˆ˜๋ฅผ ๋”ํ•˜๋ฉด, ์‹ค์ œ๋กœ๋Š” (์ •์ˆ˜ * ๋ฐ์ดํ„ฐ ํƒ€์ž…์˜ ํฌ๊ธฐ)๋งŒํผ ์ฃผ์†Œ๊ฐ’์ด ์ฆ๊ฐ€ํ•ด.

์˜ˆ๋ฅผ ๋“ค์–ด:

int numbers[5] = {10, 20, 30, 40, 50};
int *ptr = numbers;

printf("%d\n", *ptr);       // 10 ์ถœ๋ ฅ
printf("%d\n", *(ptr + 1)); // 20 ์ถœ๋ ฅ
printf("%d\n", *(ptr + 2)); // 30 ์ถœ๋ ฅ

์—ฌ๊ธฐ์„œ ptr + 1์€ ์‹ค์ œ๋กœ ์ฃผ์†Œ๊ฐ’์„ 4๋ฐ”์ดํŠธ(int์˜ ํฌ๊ธฐ) ์ฆ๊ฐ€์‹œ์ผœ. ๊ทธ๋ž˜์„œ ๋‹ค์Œ ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋˜๋Š” ๊ฑฐ์ง€.

์ด๋Ÿฐ ํŠน์„ฑ ๋•Œ๋ฌธ์— ๋ฐฐ์—ด ์ธ๋ฑ์‹ฑ๊ณผ ํฌ์ธํ„ฐ ์—ฐ์‚ฐ์ด ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋‚ณ๊ฒŒ ๋ผ:

printf("%d\n", numbers[2]);  // 30 ์ถœ๋ ฅ
printf("%d\n", *(numbers + 2));  // 30 ์ถœ๋ ฅ
printf("%d\n", 2[numbers]);  // 30 ์ถœ๋ ฅ (์ด๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ด!)

๋งˆ์ง€๋ง‰ ์ค„์ด ์ข€ ์ด์ƒํ•ด ๋ณด์ด์ง€? ํ•˜์ง€๋งŒ C ์–ธ์–ด์—์„œ๋Š” ์ด๊ฒƒ๋„ ์™„์ „ํžˆ ์œ ํšจํ•œ ํ‘œํ˜„์ด์•ผ. a[b]๋Š” ์‚ฌ์‹ค *(a + b)๋กœ ํ•ด์„๋˜๊ฑฐ๋“ . ์‹ ๊ธฐํ•˜์ง€? ๐Ÿ˜ฎ

๐Ÿƒโ€โ™‚๏ธ ํฌ์ธํ„ฐ๋กœ ๋ฐฐ์—ด ์ˆœํšŒํ•˜๊ธฐ

ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์•Œ์•„๋ณด์ž. ์ด ๋ฐฉ๋ฒ•์€ ๋•Œ๋•Œ๋กœ ๋ฐฐ์—ด ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ์–ด.

int numbers[5] = {10, 20, 30, 40, 50};
int *ptr = numbers;

for(int i = 0; i < 5; i++) {
    printf("%d ", *ptr);
    ptr++;
}
// ์ถœ๋ ฅ: 10 20 30 40 50

์ด ์ฝ”๋“œ์—์„œ ptr++๋Š” ๋‹ค์Œ ๋ฐฐ์—ด ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋„๋ก ํฌ์ธํ„ฐ๋ฅผ ์ด๋™์‹œ์ผœ. ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ฒŒ ๋˜๋Š” ๊ฑฐ์ง€.

๐Ÿ’ก ์žฌ๋Šฅ๋„ท ํŒ:

์ด๋Ÿฐ ํฌ์ธํ„ฐ์™€ ๋ฐฐ์—ด์˜ ๊ด€๊ณ„๋ฅผ ์ž˜ ์ดํ•ดํ•˜๋ฉด, C ์–ธ์–ด๋กœ ๋” ํšจ์œจ์ ์ธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์–ด. ์žฌ๋Šฅ๋„ท์—์„œ C ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ด€๋ จ ์žฌ๋Šฅ์„ ๊ณต์œ ํ•˜๊ฑฐ๋‚˜ ์ฐพ์•„๋ณผ ๋•Œ ์ด๋Ÿฐ ๊ฐœ๋…์„ ์ž˜ ํ™œ์šฉํ•ด๋ณด๋Š” ๊ฑด ์–ด๋•Œ?

4. ๋‹ค์ฐจ์› ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ ๐ŸŒŒ

์ง€๊ธˆ๊นŒ์ง€ 1์ฐจ์› ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ์˜ ๊ด€๊ณ„์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์–ด. ํ•˜์ง€๋งŒ ์‹ค์ œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” 2์ฐจ์›, 3์ฐจ์› ๋“ฑ์˜ ๋‹ค์ฐจ์› ๋ฐฐ์—ด๋„ ์ž์ฃผ ์‚ฌ์šฉํ•ด. ์ด๋Ÿฐ ๋‹ค์ฐจ์› ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ์˜ ๊ด€๊ณ„๋Š” ์–ด๋–จ๊นŒ?

๐ŸŒŸ 2์ฐจ์› ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ

2์ฐจ์› ๋ฐฐ์—ด์€ '๋ฐฐ์—ด์˜ ๋ฐฐ์—ด'์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ผ. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ณด์ž:

int matrix[3][4] = {
    {1, 2, 3, 4},
    {5, 6, 7, 8},
    {9, 10, 11, 12}
};

์ด 2์ฐจ์› ๋ฐฐ์—ด์€ ์–ด๋–ป๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋ ๊นŒ? ์‹ค์ œ๋กœ๋Š” 1์ฐจ์›์œผ๋กœ ์ญ‰ ํŽด์ ธ์„œ ์ €์žฅ๋ผ:

1 2 3 4 5 6 7 8 9 10 11 12

๊ทธ๋Ÿผ ์ด 2์ฐจ์› ๋ฐฐ์—ด์„ ํฌ์ธํ„ฐ๋กœ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์„๊นŒ? ์—ฌ๊ธฐ์„œ ํฌ์ธํ„ฐ์˜ ํฌ์ธํ„ฐ(์ด์ค‘ ํฌ์ธํ„ฐ)๊ฐ€ ๋“ฑ์žฅํ•ด!

int (*ptr)[4] = matrix;

์ด ์ฝ”๋“œ์—์„œ ptr์€ '4๊ฐœ์˜ int๋ฅผ ๊ฐ€์ง„ ๋ฐฐ์—ด์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ'์•ผ. ์ฆ‰, matrix์˜ ๊ฐ ํ–‰์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๊ฐ€ ๋˜๋Š” ๊ฑฐ์ง€.

์ด๋ ‡๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด:

printf("%d\n", (*ptr)[0]);  // 1 ์ถœ๋ ฅ (matrix[0][0])
printf("%d\n", (*(ptr + 1))[2]);  // 7 ์ถœ๋ ฅ (matrix[1][2])

๐Ÿš€ ๋‹ค์ฐจ์› ๋ฐฐ์—ด ์ˆœํšŒํ•˜๊ธฐ

๋‹ค์ฐจ์› ๋ฐฐ์—ด์„ ํฌ์ธํ„ฐ๋กœ ์ˆœํšŒํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ด. ์˜ˆ๋ฅผ ๋“ค์–ด, ์œ„์˜ 2์ฐจ์› ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋ณผ๊นŒ?

int (*ptr)[4] = matrix;

for(int i = 0; i < 3; i++) {
    for(int j = 0; j < 4; j++) {
        printf("%d ", (*ptr)[j]);
    }
    ptr++;
    printf("\n");
}

์ด ์ฝ”๋“œ๋Š” matrix์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ถœ๋ ฅํ•  ๊ฑฐ์•ผ. ptr++๋Š” ๋‹ค์Œ ํ–‰์œผ๋กœ ์ด๋™ํ•˜๋Š” ์—ญํ• ์„ ํ•ด.

๐ŸŽ“ ์‹ฌํ™” ํ•™์Šต:

3์ฐจ์› ์ด์ƒ์˜ ๋ฐฐ์—ด๋„ ๋น„์Šทํ•œ ๋ฐฉ์‹์œผ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์–ด. ํ•˜์ง€๋งŒ ์ฐจ์›์ด ๋Š˜์–ด๋‚ ์ˆ˜๋ก ๋ณต์žกํ•ด์ง€๋‹ˆ, ํ•„์š”ํ•  ๋•Œ ์ฒœ์ฒœํžˆ ๊ณต๋ถ€ํ•ด๋ณด๋Š” ๊ฒŒ ์ข‹์•„.

5. ํ•จ์ˆ˜ ์ธ์ž๋กœ์„œ์˜ ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ ๐ŸŽญ

C ์–ธ์–ด์—์„œ ํ•จ์ˆ˜์— ๋ฐฐ์—ด์„ ์ „๋‹ฌํ•  ๋•Œ, ์‹ค์ œ๋กœ๋Š” ํฌ์ธํ„ฐ๊ฐ€ ์ „๋‹ฌ๋ผ. ์ด ๊ฐœ๋…์€ ์ •๋ง ์ค‘์š”ํ•˜๋‹ˆ๊นŒ ์ž˜ ์ดํ•ดํ•ด์•ผ ํ•ด!

๐ŸŽจ ๋ฐฐ์—ด์„ ํ•จ์ˆ˜์— ์ „๋‹ฌํ•˜๊ธฐ

๋ฐฐ์—ด์„ ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์ž:

void printArray(int arr[], int size) {
    for(int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main() {
    int numbers[] = {1, 2, 3, 4, 5};
    printArray(numbers, 5);
    return 0;
}

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์ ! ํ•จ์ˆ˜ ์„ ์–ธ์—์„œ int arr[]๋Š” ์‚ฌ์‹ค int *arr๊ณผ ๋™์ผํ•ด. ์ฆ‰, ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๊ฐ€ ์ „๋‹ฌ๋˜๋Š” ๊ฑฐ์•ผ.

๊ทธ๋ž˜์„œ ์ด๋ ‡๊ฒŒ ์„ ์–ธํ•ด๋„ ๋˜‘๊ฐ™์ด ๋™์ž‘ํ•ด:

void printArray(int *arr, int size) {
    // ์ฝ”๋“œ๋Š” ๋™์ผ
}

๐Ÿน ํฌ์ธํ„ฐ๋กœ ๋ฐฐ์—ด ์ˆ˜์ •ํ•˜๊ธฐ

ํ•จ์ˆ˜์— ์ „๋‹ฌ๋œ ํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•ด ์›๋ž˜ ๋ฐฐ์—ด์˜ ๊ฐ’์„ ์ˆ˜์ •ํ•  ์ˆ˜๋„ ์žˆ์–ด:

void doubleArray(int *arr, int size) {
    for(int i = 0; i < size; i++) {
        arr[i] *= 2;
    }
}

int main() {
    int numbers[] = {1, 2, 3, 4, 5};
    doubleArray(numbers, 5);
    printArray(numbers, 5);  // 2 4 6 8 10 ์ถœ๋ ฅ
    return 0;
}

์ด ์˜ˆ์ œ์—์„œ doubleArray ํ•จ์ˆ˜๋Š” ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ 2๋ฐฐ๋กœ ๋งŒ๋“ค์–ด. ์›๋ž˜ ๋ฐฐ์—ด์ด ์ง์ ‘ ์ˆ˜์ •๋˜๋Š” ๊ฑฐ์ง€.

๐Ÿ’ก ์‹ค์šฉ์ ์ธ ํŒ:

์ด๋Ÿฐ ํŠน์„ฑ์„ ์ด์šฉํ•˜๋ฉด ํฐ ๋ฐฐ์—ด์„ ํ•จ์ˆ˜์— ํšจ์œจ์ ์œผ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์–ด. ๋ฐฐ์—ด ์ „์ฒด๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๋Œ€์‹  ํฌ์ธํ„ฐ๋งŒ ์ „๋‹ฌํ•˜๋‹ˆ๊นŒ ๋ฉ”๋ชจ๋ฆฌ์™€ ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์ง€!

6. ๋ฌธ์ž์—ด๊ณผ ํฌ์ธํ„ฐ ๐Ÿ“

C ์–ธ์–ด์—์„œ ๋ฌธ์ž์—ด์€ ์‚ฌ์‹ค ๋ฌธ์ž์˜ ๋ฐฐ์—ด์ด์•ผ. ๊ทธ๋ž˜์„œ ํฌ์ธํ„ฐ์™€ ๋ฐ€์ ‘ํ•œ ๊ด€๋ จ์ด ์žˆ์–ด. ์ด ๊ด€๊ณ„๋ฅผ ์ž˜ ์ดํ•ดํ•˜๋ฉด ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ๋ฅผ ๋” ํšจ๊ณผ์ ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ์ง€!

โœ’๏ธ ๋ฌธ์ž์—ด์˜ ๊ธฐ๋ณธ

C์—์„œ ๋ฌธ์ž์—ด์€ ๋„ ์ข…๋ฃŒ ๋ฌธ์ž('\0')๋กœ ๋๋‚˜๋Š” char ๋ฐฐ์—ด์ด์•ผ. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ณผ๊นŒ?

char str[] = "Hello";  // ์‹ค์ œ๋กœ๋Š” {'H', 'e', 'l', 'l', 'o', '\0'}

์ด ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋Š” 5์ง€๋งŒ, ์‹ค์ œ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” 6์ด์•ผ. ๋งˆ์ง€๋ง‰์— '\0'์ด ์žˆ๊ฑฐ๋“ !

๐Ÿ–‹๏ธ ๋ฌธ์ž์—ด๊ณผ ํฌ์ธํ„ฐ

๋ฌธ์ž์—ด๋„ ๋ฐฐ์—ด์ด๋‹ˆ๊นŒ, ํฌ์ธํ„ฐ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์–ด:

char *ptr = "Hello";
printf("%s\n", ptr);  // Hello ์ถœ๋ ฅ

ํ•˜์ง€๋งŒ ์ฃผ์˜ํ•  ์ ์ด ์žˆ์–ด! ์ด๋ ‡๊ฒŒ ์„ ์–ธํ•œ ๋ฌธ์ž์—ด์€ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์–ด. ์™œ๋ƒํ•˜๋ฉด ์ด ๋ฌธ์ž์—ด์€ ์ฝ๊ธฐ ์ „์šฉ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜๊ฑฐ๋“ .

์ˆ˜์ • ๊ฐ€๋Šฅํ•œ ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค๋ ค๋ฉด ์ด๋ ‡๊ฒŒ ํ•ด์•ผ ํ•ด:

char str[] = "Hello";
str[0] = 'h';  // ์ด๊ฑด ๊ฐ€๋Šฅํ•ด!

๐Ÿ“š ๋ฌธ์ž์—ด ํ•จ์ˆ˜์™€ ํฌ์ธํ„ฐ

C ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋งŽ์€ ๋ฌธ์ž์—ด ํ•จ์ˆ˜๋“ค์ด ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด. ์˜ˆ๋ฅผ ๋“ค์–ด, strcpy ํ•จ์ˆ˜๋ฅผ ๋ณผ๊นŒ?

#include <string.h>

char src[] = "Hello";
char dest[6];
strcpy(dest, src);
printf("%s\n", dest);  // Hello ์ถœ๋ ฅ</string.h>

์—ฌ๊ธฐ์„œ strcpy ํ•จ์ˆ˜๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฌธ์ž์—ด์„ ๋ณต์‚ฌํ•ด.

โš ๏ธ ์•ˆ์ „ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ:

๋ฌธ์ž์—ด์„ ๋‹ค๋ฃฐ ๋•Œ๋Š” ํ•ญ์ƒ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ์— ์ฃผ์˜ํ•ด์•ผ ํ•ด. strcpy ๋Œ€์‹  strncpy๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์•ˆ์ „ํ•  ์ˆ˜ ์žˆ์–ด!

7. ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น๊ณผ ํฌ์ธํ„ฐ ๐Ÿ—๏ธ

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

๐Ÿญ malloc๊ณผ free

C์—์„œ ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ์œ„ํ•ด malloc ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด. ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉ์ด ๋๋‚˜๋ฉด free ํ•จ์ˆ˜๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•ด์•ผ ํ•ด.

#include <stdlib.h>

int *numbers = (int *)malloc(5 * sizeof(int));
if (numbers == NULL) {
    // ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์‹คํŒจ
    exit(1);
}

for (int i = 0; i < 5; i++) {
    numbers[i] = i + 1;
}

// ์‚ฌ์šฉ์ด ๋๋‚˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ
free(numbers);</stdlib.h>

malloc์€ void* ํƒ€์ž…์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ํƒ€์ž…์œผ๋กœ ์บ์ŠคํŒ…ํ•ด์ค˜์•ผ ํ•ด.

๐Ÿ—๏ธ ๋™์  ๋ฐฐ์—ด ํฌ๊ธฐ ์กฐ์ ˆํ•˜๊ธฐ

ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘์— ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ๋ฐ”๊ฟ”์•ผ ํ•  ๋•Œ๊ฐ€ ์žˆ์–ด. ์ด๋Ÿด ๋•Œ realloc ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€:

int *numbers = (int *)malloc(5 * sizeof(int));
// ... ๋ฐฐ์—ด ์‚ฌ์šฉ ...

// ๋ฐฐ์—ด ํฌ๊ธฐ๋ฅผ 10์œผ๋กœ ๋Š˜๋ฆฌ๊ธฐ
numbers = (int *)realloc(numbers, 10 * sizeof(int));
if (numbers == NULL) {
    // ๋ฉ”๋ชจ๋ฆฌ ์žฌํ• ๋‹น ์‹คํŒจ
    exit(1);
}

// ... ๋” ํฐ ๋ฐฐ์—ด ์‚ฌ์šฉ ...

free(numbers);

realloc์€ ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์กดํ•˜๋ฉด์„œ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ์กฐ์ ˆํ•ด์ค˜. ์ •๋ง ํŽธ๋ฆฌํ•˜์ง€?

๐Ÿ’ก ์žฌ๋Šฅ๋„ท ํ™œ์šฉ ํŒ:

๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์€ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์ •๋ง ์œ ์šฉํ•ด. ์žฌ๋Šฅ๋„ท์—์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ด€๋ จ ์žฌ๋Šฅ์„ ๊ณต์œ ํ•  ๋•Œ, ์ด๋Ÿฐ ๊ณ ๊ธ‰ ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ์†Œ๊ฐœํ•˜๋ฉด ์ข‹์„ ๊ฑฐ์•ผ!

8. ํฌ์ธํ„ฐ์™€ ๋ฐฐ์—ด์˜ ์„ฑ๋Šฅ ์ฐจ์ด ๐ŸŽ๏ธ

ํฌ์ธํ„ฐ์™€ ๋ฐฐ์—ด์€ ๋ฐ€์ ‘ํ•œ ๊ด€๊ณ„๊ฐ€ ์žˆ์ง€๋งŒ, ์‚ฌ์šฉ ๋ฐฉ์‹์— ๋”ฐ๋ผ ์„ฑ๋Šฅ ์ฐจ์ด๊ฐ€ ๋‚  ์ˆ˜ ์žˆ์–ด. ์ด ๋ถ€๋ถ„์„ ์ž˜ ์ดํ•ดํ•˜๋ฉด ๋” ํšจ์œจ์ ์ธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์ง€!

๐Ÿš€ ์ ‘๊ทผ ์†๋„ ๋น„๊ต

์ผ๋ฐ˜์ ์œผ๋กœ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•œ ์ ‘๊ทผ์ด ๋ฐฐ์—ด ์ธ๋ฑ์‹ฑ๋ณด๋‹ค ๋น ๋ฅผ ์ˆ˜ ์žˆ์–ด. ์™œ ๊ทธ๋Ÿด๊นŒ?

int arr[1000000];
int *ptr = arr;

// ๋ฐฐ์—ด ์ ‘๊ทผ
for (int i = 0; i < 1000000; i++) {
    arr[i] = i;
}

// ํฌ์ธํ„ฐ ์ ‘๊ทผ
for (int i = 0; i < 1000000; i++) {
    *ptr = i;
    ptr++;
}

ํฌ์ธํ„ฐ ์ ‘๊ทผ ๋ฐฉ์‹์ด ๋” ๋น ๋ฅธ ์ด์œ ๋Š” ํฌ์ธํ„ฐ ์ฆ๊ฐ€(ptr++)๊ฐ€ ๋ฐฐ์—ด ์ธ๋ฑ์Šค ๊ณ„์‚ฐ(arr[i])๋ณด๋‹ค ๋‹จ์ˆœํ•œ ์—ฐ์‚ฐ์ด๊ธฐ ๋•Œ๋ฌธ์ด์•ผ.

๐Ÿงฎ ์ปดํŒŒ์ผ๋Ÿฌ ์ตœ์ ํ™”

ํ•˜์ง€๋งŒ ํ˜„๋Œ€์˜ ์ปดํŒŒ์ผ๋Ÿฌ๋“ค์€ ๋งค์šฐ ๋˜‘๋˜‘ํ•ด์„œ, ์ด๋Ÿฐ ์ฐจ์ด๋ฅผ ๋Œ€๋ถ€๋ถ„ ์ตœ์ ํ™”ํ•ด์ค˜. ๊ทธ๋ž˜์„œ ์‹ค์ œ๋กœ๋Š” ํฐ ์ฐจ์ด๊ฐ€ ์—†์„ ์ˆ˜๋„ ์žˆ์–ด.

// ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ด ๋‘ ๋ฃจํ”„๋ฅผ ๊ฑฐ์˜ ๋™์ผํ•˜๊ฒŒ ์ตœ์ ํ™”ํ•  ์ˆ˜ ์žˆ์–ด
for (int i = 0; i < 1000000; i++) {
    arr[i] = i;
}

for (int i = 0; i < 1000000; i++) {
    *(arr + i) = i;
}

๐Ÿ’ก ์„ฑ๋Šฅ ํŒ:

์‹ค์ œ ์„ฑ๋Šฅ ์ฐจ์ด๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์™€ ํ•˜๋“œ์›จ์–ด์— ๋”ฐ๋ผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์–ด. ์ •๋ง ์ค‘์š”ํ•œ ์„ฑ๋Šฅ์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„์ด๋ผ๋ฉด, ๋‘ ๋ฐฉ์‹์„ ๋ชจ๋‘ ์‹œ๋„ํ•ด๋ณด๊ณ  ๋ฒค์น˜๋งˆํฌ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด๋Š” ๊ฒŒ ์ข‹์•„!

9. ํฌ์ธํ„ฐ์™€ ๋ฐฐ์—ด์˜ ํ•จ์ •๋“ค ๐Ÿ•ณ๏ธ

ํฌ์ธํ„ฐ์™€ ๋ฐฐ์—ด์€ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ง€๋งŒ, ์ž˜๋ชป ์‚ฌ์šฉํ•˜๋ฉด ์œ„ํ—˜ํ•  ์ˆ˜ ์žˆ์–ด. ๋ช‡ ๊ฐ€์ง€ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ๋“ค์„ ์‚ดํŽด๋ณด์ž!

โš ๏ธ ๋ฐฐ์—ด ๋ฒ”์œ„ ์ดˆ๊ณผ

๋ฐฐ์—ด์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜ ์ ‘๊ทผํ•˜๋ฉด ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด: