티스토리 뷰

LANGUAGE/C++

[C++] DYNAMIC MEMORY - 동적 메모리

진심스테이크 2018. 3. 6. 11:07

 

동적 메모리

 

동적 메모리는 이름이 없다

전역 변수를 사용하면 안된다

 

기본 형태

데이터 타입 *함수 이름 = new 데이터 타입

ex) int *p = new int;

 

C 스타일 : ((int *)malloc(sizeof(int));

 

C++ 스타일 Example)

선언 : int *p;

        p = new int;

        p1 = new int[3]; // 배열

 

해제 : delete p;

        delete p1; // p1이 가리키는 주소만 지움 -> 다 지우는게 아님

        delete [ ]p1; // 다 지움 - 배열

 

삭제하기 전까지는 p의 위치를 바꿔서는 안된다

 

#동적 메모리를 할당 할때, 소멸자가 하나밖에 없기 때문에 크기가 하나라도 배열로 선언한다

ex) int *p = new int[1];

 


 

동적 메모리 - 성적 처리

#include "stdafx.h"
#include <stdio.h>
#include <iostream>
using namespace std;

//동적 메모리 - 성적처리
//국어 영어 수학

void input(int *p, char *n);
void op(int *p, float *avg);
void output(int *p, char *n, float *avg);

void main() {
    int *p = new int[4];
    char *name = new char[10];
    float *avg = new float;

    input(p, name);
    op(p, avg);
    cout << endl;
    output(p, name, avg);

    delete[] p;
    delete[] name;
    delete avg;
}

void input(int *p, char *n) {
    cout << "이름 입력 : ";
    cin >> n;

    cout << "점수 입력 (국어 영어 수학) : ";
    for (int i = 0; i < 3; i++) {
        cin >> p[i];
    }
}

void op(int *p, float *avg) {
    p[3] = 0;
    for (int i = 0; i < 3; i++) {
        p[3] += p[i];
    }

    *avg = p[3] / 3.f;
}

void output(int *p, char *n, float *avg) {
    cout << "이름 : " << *n << endl;
    cout << "점수 : ";
    for (int i = 0; i < 3; i++) {
        cout << p[i] << " ";
    }

    cout << endl;

    cout << "총점 : " << p[3] << endl;
    cout << "평균 : " << *avg << endl;
}

'LANGUAGE > C++' 카테고리의 다른 글

[C++] OVERROADING  (0) 2018.03.06
[C++] POINTER ARRAY - 포인터 배열  (1) 2018.03.06
[C++] POINTER - 포인터  (0) 2018.03.05
[C++] REFERENCE  (0) 2018.03.05
[C++] CALL BY  (0) 2018.03.05
댓글