이번 시간에는 동적 메모리 할당을 사용해서 이름을 입력 받고 출력하는 예제를 진행하겠다.
동적 할당을 일컫는 말은 힙 영역을 뜻한다.
동적 메모리 할당을 사용해서 이름을 입력받고 출력하는 예제를 살펴보겠다.
#include <stdio.h>
#include <malloc.h>
int main()
{
char* p_temp;
p_temp = (char*)malloc(40);//40바이트를 동적할당한다.
if (p_temp != NULL)
{
printf("너의 이름을 입력해 > \n");
gets(p_temp);
printf("~%s이야.\n", p_temp);
free(p_temp); //free를 통해서 동적 할당을 해제했다.
}
else {
printf("제대로 된 값을 입력해!!!!");
}
}
if (p_temp != NULL)
{
printf("너의 이름을 입력해 > \n");
gets(p_temp);
printf("~%s이야.\n", p_temp);
free(p_temp); //free를 통해서 동적 할당을 해제했다.
}
다음 예제는 정적 메모리 할당을 사용해서 숫자를 입력 받고 합산 하는 예제다.
#include <stdio.h>
#define MAX_COUNT 5
int main()
{
int arr[MAX_COUNT], count = 0, sum = 0;
while (count < MAX_COUNT)
{
printf("숫자를 입력하세요 : (8888를 누르면 자동종료)");
scanf_s("%d", arr + count); // 즉 count만큼 값을 입력하고 저장하겠다는 의미다.
if (count == 8888)
break; // 만약에 사용자가 8888를 입력했으면 break를 통해서 빠져나온다.
count++;
}
for (int i = 0; i < count; i++) //여기서는 값을 누적하고 더하는 부분을 뜻한다.
{
if (i > 0) printf("+");
// 맨 마지막 콘솔창에 나오는 더하기 부분을 표시하기 위해 조건을 i > 0 무조건 실행 될 수 밖에 없는 조건을 걸었다.
printf("%d", arr[i]); // 입력 받은 값들을 전부 다 출력한다.
sum = sum + arr[i]; //sum 값에 arr[i] 값을 더해 sum에 저장한다.
}
printf(" == %d\n", sum);
}
<결과>
while (count < MAX_COUNT)
{
printf("숫자를 입력하세요 : (8888를 누르면 자동종료)");
scanf_s("%d", arr + count); // 즉 count만큼 값을 입력하고 저장하겠다는 의미다.
if (count == 8888)
break; // 만약에 사용자가 8888를 입력했으면 break를 통해서 빠져나온다.
count++;
}
for (int i = 0; i < count; i++) /
{
if (i > 0) printf("+");
printf("%d", arr[i]);
sum = sum + arr[i]; //sum 값에 arr[i] 값을 더해 sum에 저장한다.
}
printf(" == %d\n", sum);
조금 더 확장해서 동적 메모리를 할당하고 숫자를 입력 받아 합산하는 예제를 풀어보자.
#include <stdio.h>
#include <malloc.h>
int main()
{
int* p_num_list, limit = 0, count = 0, sum = 0, i;
printf("입력할 개수를 입력하세요 : ");
scanf_s("%d", &limit); // 사용자로부터 값을 입력 받는다.
p_num_list = (int*)malloc(sizeof(int) * limit); // 사용자로부터 입력 받은 값을 동적 할당으로 사용한다.
while (count < limit)
{
printf("숫자를 입력하세요 : (8888를 누르면 종료한다. : ");
scanf_s("%d", p_num_list + count); // 이 의미는 &p_num_list[count]와 동일하다.
if (*(p_num_list + count) == 8888) break;
//만약에 포인터(대상이 가리키고 있는 값이 8888) == (사용자가 입력하는 값이 8888이라면) 빠져나와라.
count++;
}
for (int i = 0; i < count; i++)
{
if (i > 0) printf("+");
printf("%d", *(p_num_list + i)); //앞에선 p_num_list를 arr[i]로 표현했다. 둘이 같은 표현이다. *(arr+i) 로도 표현가능하다.
sum = sum + *(p_num_list + i);
}
printf(" = %d\n", sum);
free(p_num_list);
}