๐์ ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น
C์ธ์ด์์ ๋ฐฐ์ด์ ์ ์ธํ๋ ค๊ณ ํ ๋, ๋ค์๊ณผ ๊ฐ์ด ๋ณ์๋ก ๊ธธ์ด๋ฅผ ์ ์ธํ๋ ค๊ณ ํ๋ฉด ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
#include <stdio.h>
int main() {
int input;
printf("๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ์
๋ ฅํ์ธ์: ");
scanf_s("%d", &input);
int arr[input]; // ์ปดํ์ผ ์๋ฌ: ์์ ์์ ๊ฐ์ด ์์ด์ผ ํฉ๋๋ค.
return 0;
}
์ฝ๋ ๋ด ์ง์ ๋ณ์๋ฅผ ์ ์ธํ ๋๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ปดํ์ผ ์์ ์ ํ ๋น ๋ฐ๋๋ค. ์ด๋ ์์คํ ์ด ์์์ ํ์ ์ ํ์ธํ๊ณ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ ์ญ ๋ณ์๋ฅผ ์ ์ธํ ๋ชจ๋ ๋ณ์๋ ์คํ ์์ญ์ ํ ๋น๋๋ฉฐ ํจ์๊ฐ ์ข ๋ฃ๋๋ฉด ์๋ฉธํ๋ค. ์ด๋ ๋ฏ ์ปดํ์ผ ์์ ์ ์ ํด์ง๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด๋ผ๊ณ ํ๋ค.
๐๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น
์ ๋ ฅ๊ฐ์ ๋ฐ๋ผ ๋ฐฐ์ด์ ์ ์ธํ๋ค๊ณ ์๊ฐํด๋ณด์. ์ฌ์ฉ์์๊ฒ ๊ฐ์ ์ ๋ ฅ๋ฐ๋ ๊ฒ์ ๋ฐํ์(์คํ ์ค)์ด๊ณ , ์ฝ๋ ๋ด ์ ์ธ๋ ๋ณ์๋ ์ด๋ฏธ ์คํ ์์ญ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น ๋ฐ๊ณ ํ๋ก๊ทธ๋จ์ ์์ํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๊ฐ ์ํ๋๋๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ด์ด์ค ์ ์๋ค. ์ด๋ ๋ฐํ์์ ์ํ๋ ๋งํผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น ๋ฐ์ ์ ์๋๋ก ํด์ฃผ๋ ๊ฒ์ด ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด๋ค.
#include <stdio.h>
#include <malloc.h>
int main() {
int num;
int* student;
int sum = 0;
printf("ํ์ ์๋ฅผ ์
๋ ฅํ์ธ์: ");
scanf_s("%d", &num);
student = (int*) malloc(sizeof(int) * num);
if (student == NULL) {
printf("๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ ์ ์์ต๋๋ค.");
return 0;
}
printf("ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ: %d\n", sizeof(int) * num);
for (int i = 0; i < num; i++) {
printf("%d๋ฒ์งธ ํ์ ์ฑ์ ์
๋ ฅ: ", i + 1);
scanf_s("%d", &student[i]);
}
for (int i = 0; i < num; i++) {
printf("%d๋ฒ์งธ ํ์ ์ฑ์ : %d\n", i + 1, student[i]);
sum += student[i];
}
printf("์ด์ : %d", sum);
free(student);
return 0;
}
ํ(Heap) ์์ญ์ ์ฌ์ฉ์๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ง์ ํ ๋นํ๋ ๊ณณ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ผ๋ถ๊ฐ ํ ๋น๋์๋ค๊ฐ ํ์๋จ์ ๋ฐ๋ณตํ๋ค. ๋ฐํ์์ ํฌ๊ธฐ๊ฐ ๊ฒฐ์ ๋๋ค.
`void* malloc(size_t size)`
๋ง๋ก ๋๋ ์ ์ผ๋ก์ผ๋ก ๋ถ๋ฅธ๋ค. ์ธ์๋ก ํ ๋น ๋ฐ๊ณ ์ํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฐ์ดํธ ๋จ์๋ก ๋ฐ์ ํ ์์ญ์ ์ฌ์ฉ์๊ฐ ์ํ๋ ๋งํผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ค. ์ด ํจ์๋ ๋ฉ๋ชจ๋ฆฌ์ ์์ ์ฃผ์๊ฐ, ์ฆ void ํฌ์ธํฐ๋ฅผ ๋ฐํํ๋๋ฐ, ์ํ๋ ๋งํผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํด์ค๋ฟ ์๋ฃํ์ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ๋ฉด null ํฌ์ธํฐ๋ฅผ ๋ฐํํ๋ฏ๋ก ์ฐธ์กฐ ์ ์ฃผ์ํ๋ค.
`void free(*void memblock)`
๋ฉ๋ชจ๋ฆฌ ํด์ . ์ฌ์ฉ์ ๋ง์น ๋ฉ๋ชจ๋ฆฌ(์ด์ ๋์ด์ ์ฐธ์กฐ๋์ง ์์ ๋ฉ๋ชจ๋ฆฌ)๋ฅผ ํด์ ํ๋ค. ๋์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น ๋ฐ๋ ๊ฒฝ์ฐ ํ ์์ญ์ ์ฌ์ฉ์๊ฐ ์ง์ ๊ฑด๋๋ฆฌ๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ ์ฌ์ฉ ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฐํํด์ผ ํ๋ค. ํจ์๊ฐ ์ข ๋ฃ๋ ๋๊น์ง ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ์ง ์์ผ๋ฉด ํ๋ก๊ทธ๋จ์ด ํ์ํ์ง ์์ ๋ฉ๋ชจ๋ฆฌ(๋์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด)๋ฅผ ๊ณ์ ์ ์ ํ๋ฉฐ ํ ์์ญ์ ๋จ์์๊ฒ ๋๋ฉด์ ๋ถํ์ํ๊ฒ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํ๋ ๋ฉ๋ชจ๋ฆฌ ๋์ ํ์์ด ๋ฐ์ํ๋ค.
`void* realloc(*void memblock, size_t size)`
๋ฉ๋ชจ๋ฆฌ ์ฌํ ๋น. ์ด๋ฏธ ํ ๋น๋ฐ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์งํ๋ฉด์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ๋ ๋๋ฆฐ๋ค. `size` ์ธ์๋ ๊ธฐ์กด ๋ฉ๋ชจ๋ฆฌ์ ์๋ก ํ์ฅํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ํ ๊ฐ์ ๋ปํ๋ค.
'C, C++' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++] ์์(Inheritance) (0) | 2024.08.29 |
---|---|
[C++] ๊ฐ์ฒด ์งํฅ (6) | 2024.08.19 |
[C] ๊ตฌ์กฐ์ฒด, ๊ณต์ฉ์ฒด (0) | 2024.08.13 |
[C] C์ธ์ด ๊ธฐ์ด (0) | 2024.08.09 |
[C++] ๊ธฐ์ด (0) | 2023.08.25 |