@ 16. 1 ~ 17. 1/C++

2차원 동적배열 생성, 초기화, 복사

namoeye 2013. 2. 24. 22:21
#include<iostream>
#include<conio.h>

using namespace std;

void end(int **star, int row);
void print(int **star, int row, int col);
void copys(int **star, int (*ptr)[2], int row, int col);

int main()
{
	int row=5;
	int col=2;
	int (*ptr)[2];

	int sample[5][2]={{1,2},{2,3},{3,4},{4,5},{5,6}};
	int **twostar=new int*[row];

	ptr=sample;

	for(int i=0;i<row;i++)
	{
		twostar[i]=new int[col];
		memset(twostar[i],0,col*sizeof(int));
	}
	print(twostar,5,2);
	copys(twostar,ptr,row,col);
	cout << endl;
	print(twostar,5,2);
	getch();
	return 0;
}

void end(int **star, int row)
{
	for(int i=0;i<row;i++)
	{
		delete star[i];
	}
	delete [] star;
}

void print(int **star, int row, int col)
{
	for(int i=0;i<row;i++)
	{
		for(int j=0;j<col;j++)
		{
			cout << star[i][j] << " ";
		}
		cout << endl;
	}
}

void copys(int **star, int (*ptr)[2], int row, int col)
{
	for(int i=0;i<row;i++)
	{
		memcpy(star[i],ptr[i],col*sizeof(int));
	}
}


 

음..copys함수의 두번째 매개변수..

책에서는.. int *sam으로 해놓고.. 메인함수내에서 호출 시(copys함수) sample[0]의 첫번째 주소를 넘겨서..

함수내에서는 memcpy(star[i],(sam+i*col), col*sizeof(int)); // 복사

이런식으로 처리하는데..솔직히 (sam+i*col)이 눈에 안들어오기도하고..해서 난 2차원 배열포인터를 선언해서 해결했다.

뭐....똑같은거 아닌가?아닌가....미안미안