동적 메모리
동적 메모리
동적 메모리는 이름이 없다
전역 변수를 사용하면 안된다
기본 형태
데이터 타입 *함수 이름 = 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 *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; } | 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 |