도서 : 초보자를 위한 C++ 프로그래밍(성안당)

지음 : 강성수 지음


 

  • 자료형에 대해 동적으로 메모리를 확보하려면 new 연산자를, 할당한 동적 메모리 공간을 해제(free)하려면 delete 연산자를 사용한다.
    • 형식 : 클래스명 *포인터 변수 = new 클래스명; -> int *pt = new int;
    • delete 포인터 변수; -> delete pt;
    • malloc과 free와 비슷하다. -> ip = (int *)malloc(sizeof(int)); -> free(ip);
    • 실습 - 한 개의 변수에 대한 동적 메모리 할당
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
 
int main() {
    int *pt = new int;
    
    cout << "pt의 주소 : " << pt << endl;
    
    *pt = 123;
 
    cout << "pt안의 값 : " << *pt << endl;
 
    delete pt;
 
    return 0;
}
cs
    • 결과

  • new[] 연산자와 delete[] 연산자
    • 단일 변수 등과 같은 인스턴스뿐만 아니라 배열이나 구조체, 클래스 같은 연속된 메모리 공간도 동적으로 메모리를 확보하려면 new[] 연산자를 사용하고, 할당한 동적 메모리 공간을 해제(free)하려면 delete[] 연산자를 사용한다.
    • 형식 : int *pt = new int[10]; -> delete[] pt;
    • 실습 - 동적 메모리를 사용한 문자열 역순으로 변환하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
 
char *reverse(char *word, int len);
 
int main() {
    char W[] = "I can do it!";
    cout << reverse(W, strlen(W)) << endl;
 
    return 0;
}
 
char *reverse(char *word, int len) {
    char *pt = new char[len + 1];
 
    for (int i = 0; i <= len ; i++) {
        pt[i] = word[len - i - 1];
    }
 
    pt[len] = NULL;
 
    return pt;
}
cs
    • 결과

'C++ 개념' 카테고리의 다른 글

const 객체  (0) 2019.03.03
클래스(class) - 생성, 소멸  (0) 2019.03.03
템플릿 함수  (0) 2019.03.02
inline 함수  (0) 2019.03.01
공용체  (0) 2019.03.01

도서 : C++ 프로그래밍 입문(한티미디어)

지음 : 황준하, 김성영

 


 

  • C에서는 malloc을 사용하여 메모리를 할당하지만 C++에서는 new라는 명령어를 이용해 메모리를 할당할 수 있다. - ex)int *p = (int *) malloc(sizeof(int)); -> int *p = new int; / free p; -> delete p;

  • 연습문제 2.6 - 다음과 같은 main 함수가 동작할 수 있도록 GetArray 함수를 작성하라.
1
2
3
4
5
6
7
8
9
10
11
12
13
int main(void) {
    int j;
    int *pAry;
 
    pAry = GetArray(5);
    for (j = 0; j < 5; j++)
        cout << pAry[j] << " ";
    cout << endl;
 
    delete[] pAry;
 
    return 0;
}
cs

 

GetArray 함수 내에서는 지정한 개수만큼의 메모리를 동적으로 생성하고 각 원소의 값을 초기화한 후 메모리 주소를 반환해야 한다.

 

  • 내가 만든 GetArray 함수
1
2
3
4
5
6
7
8
9
int *GetArray(int x) {
    int *Ary = new int[x];
 
    for (int i = 0; i < x; i++) {
        Ary[i] = i;
    }
 
    return Ary;
}
cs
  • 모든 소스
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
#include <iostream>
 
using namespace std;
 
int *GetArray(int x) {
    int *Ary = new int[x];
 
    for (int i = 0; i < x; i++) {
        Ary[i] = i;
    }
 
    return Ary;
}
 
int main(void) {
    int j;
    int *pAry;
 
    pAry = GetArray(5);
    for (j = 0; j < 5; j++)
        cout << pAry[j] << " ";
    cout << endl;
 
    delete[] pAry;
 
    return 0;
}
cs
  • 실행 결과

 


  • 연습문제 2.7 - 다음과 같은 구조체가 있다. 이 구조체 변수 5개를 원소로 갖는 배열을 포인터 변수를 사용하여 동적으로 생성하고 각 원소의 x, y 값을 임의의 값으로 채워 보라.
1
2
3
struct Point{
    int x, y;
};
cs

 

이 연습문제에서는 각 원소에 대해 배열 방식이 아닌 포인터 방식으로 접근해 보라.

  • 내가 만든 코드 : 0~10 사이의 랜덤한 변수를 저장했다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <time.h>
#include <iostream>
using namespace std;
 
struct Point {
    int x, y;
};
 
int main(void) {
    srand(time(NULL));
    Point *point = new Point[5];
 
    for (int i = 0; i < 5; i++) {
        point[i].x = rand()%10;
        point[i].y = rand()%10;
    }
    for (int j = 0; j < 5; j++) {
        cout << point[j].x << " " << point[j].y << endl;
    }
 
    delete point;
 
    return 0;
}
cs
  • 결과

 

+ Recent posts