MFC

[MFC] 2차원배열포인터 동적할당 받아 사용하기

성엽이 2014. 4. 3. 19:17

 

 & 동적할당은 메모리로 사용할 배열크기를 정확히 알고 있을 때 사용하면 더욱 빛을 발한다.
 & 이중포인터를 넘기는 이유는 포인터(주소)를 가지는 포인터(주소)를 넘겨서 메모리로 간접적으로 접근하여 함수를 실행하면 r굳이 반환값으로 넘겨주지 않아도값을 변경할 수 있다. 
 & 함수에서 사용하는 인자값은 주소값의 주소값을 가지고 있어서 정작 지역변수로 사라지는 값은 이중포인터(즉, 주소값의 주소값)이므로
    메인함수로 돌아가면 값이 바뀌는 것을 확인 할 수 있다. 그냥 포인터로 넘겨주면 함수에서 지역변수로 사라지는 값이 포인터이므로 
    메모리상에서 값을 잃어버려 메인함수에서 받는 값은 그대로이고 바뀌지 않는다.


    헥헥
 
#include 
<atlstr.h
>//헤더#include <iostream>//헤더
using namespace std;

#define    nMODEL    100
#define    nPRODUCT  15

void TransFunc(int nModelCnt, int nProdCnt, CString **TransArray);

/* 2차원 배열 동적 할당 */
void TransFunc(int nModelCnt, int nProdCnt, CString **TransArray)
{

  // ~~~~~~~~~~~~~~~~~~~~~~~~~ 2차원배열처럼 사용하시면됩니다, 아니면 포인터로 사용하셔두 되구요.

  for(int ModelCount=0 ; ModelCount < nModelCnt ; ModelCount++)
  {
    for(int ProductCount=0 ; ProductCount < nProdCnt ; ProductCount++)
    {
      TransArray[ModelCount][ProductCount] = "OK, Bye";
      //(*(TransArray+ProductCount)[ModelCount]) = "OK, Bye";
    }
    
  }
  
  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


}

int main()
{
  HWND hwnd=NULL;

  CString **ProdBuff = new CString*[nMODEL];

  for(int nArray = 0; nArray < nMODEL; nArray++)
  {
    ProdBuff[nArray] = new CString[nPRODUCT];
  }

  ProdBuff[0][0= "Do you wanna build a snow man?";

  MessageBox(hwnd,ProdBuff[0][0],_T("?"),MB_OK);

  TransFunc( nMODEL , nPRODUCT , ProdBuff );

  MessageBox(hwnd,ProdBuff[0][0],_T("go away!"),MB_OK);

  // 동적할당 해제
  for(int cntDel = 0; cntDel < nMODEL; cntDel++)
  {
    delete [] ProdBuff[cntDel]; 
  }  
  delete [] ProdBuff;

  getchar();

  return 0;
}

 

 

 

 

 

OK Bye~