본문 바로가기
Programming/C&C++

[C++] DYNAMIC MEMORY

동적 메모리







동적 메모리

 

동적 메모리는 이름이 없다

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

 

기본 형태

데이터 타입 *함수 이름 = 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];




성적처리

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#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 *= 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 << "이름 : " << *<< endl;
    cout << "점수 : ";
    for (int i = 0; i < 3; i++) {
        cout << p[i] << " ";
    }
 
    cout << endl;
 
    cout << "총점 : " << p[3<< endl;
    cout << "평균 : " << *avg << endl;
}
 
cs


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

[C++] STACK / QUEUE  (3) 2018.04.15
[C++] 클래스 상속 관계  (0) 2018.04.15
[C++] POINTER ARRAY  (0) 2018.04.15
[C++] 오버로딩이 불가능 연산자  (2) 2018.04.15
[C++] String 클래스 직접 구현  (1) 2018.04.15