티스토리 툴바


#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;
 }
}

Posted by 정섭,