๐ ํฌ์ธํฐ์ ๋ฐฐ์ด์ ๊ด๊ณ: 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. ํฌ์ธํฐ์ ๋ฐฐ์ด์ ํจ์ ๋ค ๐ณ๏ธ
ํฌ์ธํฐ์ ๋ฐฐ์ด์ ๊ฐ๋ ฅํ ๋๊ตฌ์ง๋ง, ์๋ชป ์ฌ์ฉํ๋ฉด ์ํํ ์ ์์ด. ๋ช ๊ฐ์ง ์ฃผ์ํด์ผ ํ ์ ๋ค์ ์ดํด๋ณด์!
โ ๏ธ ๋ฐฐ์ด ๋ฒ์ ์ด๊ณผ
๋ฐฐ์ด์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ ์ ๊ทผํ๋ฉด ์ฌ๊ฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ด:
- ์ง์์ธ์ ์ฒ - ์ง์ ์ฌ์ฐ๊ถ ๋ณดํธ ๊ณ ์ง
์ง์ ์ฌ์ฐ๊ถ ๋ณดํธ ๊ณ ์ง
- ์ ์๊ถ ๋ฐ ์์ ๊ถ: ๋ณธ ์ปจํ ์ธ ๋ ์ฌ๋ฅ๋ท์ ๋ ์ AI ๊ธฐ์ ๋ก ์์ฑ๋์์ผ๋ฉฐ, ๋ํ๋ฏผ๊ตญ ์ ์๊ถ๋ฒ ๋ฐ ๊ตญ์ ์ ์๊ถ ํ์ฝ์ ์ํด ๋ณดํธ๋ฉ๋๋ค.
- AI ์์ฑ ์ปจํ ์ธ ์ ๋ฒ์ ์ง์: ๋ณธ AI ์์ฑ ์ปจํ ์ธ ๋ ์ฌ๋ฅ๋ท์ ์ง์ ์ฐฝ์๋ฌผ๋ก ์ธ์ ๋๋ฉฐ, ๊ด๋ จ ๋ฒ๊ท์ ๋ฐ๋ผ ์ ์๊ถ ๋ณดํธ๋ฅผ ๋ฐ์ต๋๋ค.
- ์ฌ์ฉ ์ ํ: ์ฌ๋ฅ๋ท์ ๋ช ์์ ์๋ฉด ๋์ ์์ด ๋ณธ ์ปจํ ์ธ ๋ฅผ ๋ณต์ , ์์ , ๋ฐฐํฌ, ๋๋ ์์ ์ ์ผ๋ก ํ์ฉํ๋ ํ์๋ ์๊ฒฉํ ๊ธ์ง๋ฉ๋๋ค.
- ๋ฐ์ดํฐ ์์ง ๊ธ์ง: ๋ณธ ์ปจํ ์ธ ์ ๋ํ ๋ฌด๋จ ์คํฌ๋ํ, ํฌ๋กค๋ง, ๋ฐ ์๋ํ๋ ๋ฐ์ดํฐ ์์ง์ ๋ฒ์ ์ ์ฌ์ ๋์์ด ๋ฉ๋๋ค.
- AI ํ์ต ์ ํ: ์ฌ๋ฅ๋ท์ AI ์์ฑ ์ปจํ ์ธ ๋ฅผ ํ AI ๋ชจ๋ธ ํ์ต์ ๋ฌด๋จ ์ฌ์ฉํ๋ ํ์๋ ๊ธ์ง๋๋ฉฐ, ์ด๋ ์ง์ ์ฌ์ฐ๊ถ ์นจํด๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.
์ฌ๋ฅ๋ท์ ์ต์ AI ๊ธฐ์ ๊ณผ ๋ฒ๋ฅ ์ ๊ธฐ๋ฐํ์ฌ ์์ฌ์ ์ง์ ์ฌ์ฐ๊ถ์ ์ ๊ทน์ ์ผ๋ก ๋ณดํธํ๋ฉฐ,
๋ฌด๋จ ์ฌ์ฉ ๋ฐ ์นจํด ํ์์ ๋ํด ๋ฒ์ ๋์์ ํ ๊ถ๋ฆฌ๋ฅผ ๋ณด์ ํฉ๋๋ค.
ยฉ 2025 ์ฌ๋ฅ๋ท | All rights reserved.
๋๊ธ 0๊ฐ