& 동적할당은 메모리로 사용할 배열크기를 정확히 알고 있을 때 사용하면 더욱 빛을 발한다. & 이중포인터를 넘기는 이유는 포인터(주소)를 가지는 포인터(주소)를 넘겨서 메모리로 간접적으로 접근하여 함수를 실행하면 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~
'MFC' 카테고리의 다른 글
[MFC] HFONT 속성값 (0) | 2014.04.04 |
---|---|
[MFC] MFC 팁 (0) | 2014.04.04 |
[MFC] Split Button, Command Button Control 사용하기 (0) | 2014.04.02 |
[MFC] Split Button Control 이 뭐지? (0) | 2014.04.02 |
[MFC] SysLink Control 사용하기 (0) | 2014.04.02 |