본문 바로가기

강의자료/C/C++

048. 2차배열을 동적으로 생성하자.


◈ 이 글은 강의를 위하여 제가 직접 작성한 내용입니다. 따라서 퍼가실 경우, 출처를 명확히 해주시기 바랍니다!!
◈ This ariticle was written by me for teaching. So if you want to copy this article, please clarify the source!!



#include 
using namespace std; 

int main()
{
	int row=5;
	int col=2;
	//정적 배열은 변수로 선언할 수 없다.
	//int sample[row][col]={0,};   //에러  
	int sample[5][2]={{1,2},{2,3},{3,4},{4,5},{5,6}};
	//memset(sample, 0, row*col*sizeof(int));

	// 5개의 포인터 : 2개짜리 배열을 가리키는게 목적.
	// 5개의 포인터를 가리키기위한 또하나의 포인터.

	int **twostar;  //5x2동적 생성 선언 
	//동적 생성은 변수를 이용하여 선언할 수 있다. 
	twostar= new int*[row]; //row 동적 생성 
	for (int i=0; i < row; i++)
	{
		twostar[i]=new int[col]; //col 동적생성

// 		for(int j=0; j < col; j++)
// 			twostar[i][j] = 0;
		memset(twostar[i], 0, col*sizeof(int));//초기화  0
	}  

	//2차원 배열 복사   
	for (int i=0; i < row; i++)
	{
// 		for(int k=0; k < col;k++)
// 		{
// 			twostar[i][k] = sample[i][k];
// 		}
		memcpy(twostar[i], sample[i], col*sizeof(int));//복사  
	} 

	//출력 
	for (int j=0; j < row; j++)
	{
		for(int k=0; k < col;k++)
		{
			cout << twostar[j][k] << "\t" ;      
		}
		cout << endl;        
	}

	//동적 메모리 해제 
	for (int i=0; i < row; i++)
	{
		delete [] twostar[i];
	}
	delete [] twostar; 

	return 0;
}