C, C++

[C] ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น

๋ฒผ๋ฆฌ01 2024. 8. 13. 14:38

๐Ÿ“Œ์ •์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น

 

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