언어/C

[C언어] 정적할당과 동적할당

qkrgusqls 2023. 3. 24. 09:33

 

동적할당 : 메모리를 힙에서 할당 받는 방식

malloc을 통해서 메모리의 크기를 자유롭게 요청

 

정적할당 : 메모리를 스택에서 할당 받는 방식

컴파일 타임에 미리 결정된 크기만

 

int arr[20]; // 컴파일 타임에 결정 
int * arr = malloc(sizeof(int)*5); //런타임에 결정
 

 

사람의 이름과 나이를 저장하는 프로그램

 

#include <stdio.h>
#include <stdlib.h> // malloc 사용시 추가해야함
#define NAME_SIZE 20
int main() {

  printf("==이름과 나이를 입력하는 프로그램==\r\n");
  int count;
  int size = NAME_SIZE;

  while (1) {
  printf("몇명의 사람을 입력할겁니까?");
  scanf("%d", &count);
  if (count > 0) {
    break;}
    else {
      printf("1이상의 숫자를 입력해주세요.");
    }
    }
  int * ages = malloc(sizeof(int) * count);
  char * names = malloc(sizeof(char) * size * count);

  for (int i = 0; i < count; i++) {
    printf("%d번째 사람의 이름을 입력해주세요. : ", i + 1);
    scanf("%s", &names[i * size]);
    printf("%d번째 사람의 나이를 입력해주세요 : ", i + 1);
    scanf("%d", &ages[i]);
    }

  for (int i = 0; i < count; i++) {
    printf("%d번째 사람의 이름은 %s,나이는 %d입니다.\n", i + 1, names+i*size, *(ages+i));
    }
return 0;}