#include <iostream>
using namespace std;
void main()
{
int **a; //이차원 배열을 위한 이중포인터 a선언
int i, j, cnt=0;
a = new int*[3]; //이차원 배열에서 3행을 먼저 선언
cout << a << " a에 저장된 주소값" << endl; //a에 저장된 주소값
//동적할당이 가능한 int*형을 3개를 선언한다는걸로 생각.
//밑에서 할당할때 2대신 4를 사용하면 3*4행렬이 만들어짐.
for (i=0; i<3; i++) //각 행에 대해서 열을 선언해줌.
{
a[i] = new int[2]; //a[i]행에 대해서 열의 개수를 선언해줌.
}
for (i=0; i<3; i++) // 0 1
{ // 2 3
for (j=0; j<2; j++) // 4 5
{
a[i][j] = cnt++;
}
}
cout << endl;
for (i=0; i<3; i++) //행의 주소값을 출력 방법1
{ //이중포인터에서 포인터 한번만 사용하면
cout << *(a+i) << endl; //a에 저장된 주소+i를 하여 그 위치에 접근한다.
}
for (i=0; i<3; i++) //행의 주소값을 출력 방법2
{
cout << a[i] << endl;
}
cout << endl;
for (i=0; i<3; i++) //a[i][j]에 저장된 012345값을 출력
{ //배열을 이용하여 접근
for (j=0; j<2; j++)
{
cout << a[i][j] << " " ;
}
cout << endl;
}
for (i=0; i<3; i++) //a[i][j]에 저장된 012345값을 출력
{ //포인터를 이용하여 행렬에 접근
for (j=0; j<2; j++)
{
cout << *(*(a+i)+j) << " " ; //*(a+i)면 행의 위치를 나타내는 주소값이 들어있음
} //(*(a+i)+j)면 i행,j열의 주소값을 나타내고
cout << endl; //*(*(a+i)+j)면 i행,j열에 들어있는 값을 나타낸다.
}
cout << endl;
for (i=0; i<3; i++)
{
for (j=0; j<2; j++)
{
cout << &a[i][j] << " " ; //&는 주소를 나타내준다.
} //a[i][j]의 위치를 나타낸다.
cout << endl;
}
}

