반응형
정적할당
- 프로그램이 시작되기 전에 미리 정해진 크기의 메모리를 할당받는 것
- 더 큰 입력이 들어오면 처리못하고 더 작은 입력이 들어오면 메모리 낭비
동적할당
- 실행 도중에 동적으로 메모리를 할당 받는 것 (heap영역)
- 사용이 끝나면 메모리 반납
int *pi; // 동적 메모리를 가르키는 포인터, 주소값 저장
pi = new int; // 동적 메모리 할당 , new는 주소 리턴
*pi = 100; // 동적메모리 사용
delete pi; // 동적 메모리 반납
int* arr = new int[3]; // 동적인 배열 생성
delete[] arr; // 배열 메모리 삭제
//2차원 배열 모두 동적으로 받기
int **p = new int*[ROW];
for (int i=0;i<ROW;i++){
parr[i]=new int[COL]; }
// 배열 삭제
for (int i=0;i<ROW;i++)
delete[] parr[i]
delete[] parr;
2차원 배열에서 층과 방을 모두 동적으로 받는 내용을 처음봤을 때 읭스러웠다
그건 아마 내가 포인터 개념을 좀 잊었기 때문...
차근차근 정리해보니 이해가 조금 되었는데 까먹을거같아서 나만의 방식으로 적어놔야겠다.
p는 배열 층의 시작 주소를 저장한다
배열 층은 각 층의 방의 시작 주소를 저장한다
따라서 p는 이중포인터가 되고 배열은 포인터 배열이 된다.
/* 파일에 있는 맵 데이터를 읽어, 크기만큼 맵을 생성하고 맵데이터를 읽은 후 출력하기
맵데이터
4 3
1 1 1
1 0 1
1 1 1
1 0 0
*/
#include <iostream>
#include <fstream>
using namespace std;
int** readMap(const char* fileName, int& r, int& c) { // 파일 열어서 배열 생성해서 리턴
ifstream fin(fileName); //파일 열기
int** map = NULL; //리턴할 배열
if (fin.is_open()) { // 열려 있다면
int row, col;
fin >> row >> col;
r = row;
c = col;
map = new int*[row];
for (int i = 0; i < row; i++) {
map[i] = new int[col];
for (int j = 0; j < col; j++) {
fin >> map[i][j];
}
}
}
else {
cout << "파일 확인 요함" << endl;
}
return map;
}
void showMap(int** (&map), const int& r, const int& c) {// 참조자 사용으로 데이터 아끼기
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++) {
cout<< map[i][j];
}
cout << "\n";
}
}
int main() {
int row, col;
int** map = readMap("map.txt", row, col);
if (map != NULL) {
showMap(map, row, col);
}
return 0;
}
반응형
'학부내용 예습 > [ 2021 겨울 ] C++' 카테고리의 다른 글
[ 8강 ] 클래스 (const 멤버함수, 생성자, 소멸자) (0) | 2022.02.05 |
---|---|
[ C++ ] 7강. 클래스, 객체지향 프로그래밍 (0) | 2022.01.30 |
[ C++ ] 5강. 포인터 배열, 문자열 배열, 참조자, 함수 (0) | 2022.01.26 |
[ C++ ]4강. 다차원 배열 / 실습 (0) | 2022.01.23 |
[ C++ ] 3강. 배열 / 실습 코드 (0) | 2022.01.04 |