자료구조(2)_동적할당

헤더파일

<mallloc.h> // 동적할당에 관한 함수가 정의된 헤더파일
#include <stdlib.h> // -> malloc.h가 포함된 헤더파일

예시코드(1)

#include<stdio.h>
#include <stdlib.h>

int main()
{
    // malloc
    //동적할당 생성 함수
    // 자료형 * 포인터명 = malloc(sizeof(자료형)*개수)

    // void *malloc(size_t size);

    //반환값이 void pointer. 간접참조 연산자를 통해 주소에 해당하는 값을 보내줄 수 없다. 그냥 주소값이라고 보면 된다.
    //매개변수  size_t 할당받을 공간의 크기. sizeof -> 공간의 크기 계산. sizeof-> 반환값이 정수

    //배열로써 할당을 받을거면 개수를 적어줘야 할텐데, 배열에서 적는 갯수는 다르다.
    //배열은 반드시 양의정수 상수값만 적고 여기서는 필요한 값만큼 변수 지정해서 넣어준다.

    int *pt = (int *)malloc(sizeof(int)); // 반환 타입이 안맞으면 c++에서는 에러 출력
    //void pointer 란건 주소값만 표현한다.  %p -> pointer의 주소를 출력

    *pt = 30;
    printf("%p\n", pt);
    printf("%d\n", *pt);

    // 할당받을 공간의 크기 -> int 형이 들어갔다
    // struct info{ char name[10]. int age;}; -> 16byte가 들어가.
    //할당한 크기를 받을 포인터변수 변수가 필요

    free(pt); //할당 해제할 공간의 주소값을 넣어달라

    //free
    //동적할당 해제

    return 0;
}

문제 풀이

간단한 문제 설명 문제 : 전체 방의 갯수를 입력 받고 그 중 짝수 번째 방을 출력한다.

내 코드

#include<stdio.h>
#include <stdlib.h>
int main(void) {

        int cnt, num;
        int n = 0;

        printf("크기 입력 : ");
        scanf_s("%d", &cnt, sizeof(int));

        int *pt = (int *)malloc(sizeof(int) *n);

        for (int i = 0; i < cnt; i++) {
            printf("숫자 입력 : ");
            scanf_s("%d", &num);
            pt[i] = num;

            if (num % 2 == 0) {
                printf("%d 번방 = %d\n", i, num);
            }

        }

        free(pt);//할당 해제할 공간의 주소값을 넣어달라
    return 0;
}

선생님 코드


#include<stdio.h>
#include <stdlib.h>

int main(void) {

    int su;
    printf("크기 입력 : ");
    scanf_s("%d", &su);

    int * pt = (int *)malloc(sizeof(int) * su);

    for (int i = 0; i < su; i++) {
        printf(" 숫자 입력 : ");
        scanf_s("%d", pt + i);
    }
    printf("\n\n짝수\n");
    for (int i = 0; i < su; i++) {
        if (pt[i] % 2 == 0) {
            printf("%d번방 : % d\n", i, pt[i]);
        }
    }

    free(pt);
    return 0;

}
정리

pt + i로 scanf_s를 받으면 편하다. 어차피 scanf도 주소값으로 입력을 받으니까. 포인터를 갖다쓰면 되지.


참고자료

kg아이티뱅크학원 (자료구조 수업)

0%