2009年8月31日 星期一

指標的指標使用的兩種時機

1. function
真正的記憶體在function 內被allocate, caller 只要有一個指標,傳入指標的位址(即指標的指標)即可使用。
只是使用完畢得由caller release 記憶體。

#define MEM_SIZE 100


//function code:
Func(BYTE **pMem)
{
*pMem= malloc(100);
}

//caller code:
Main()
{
BYTE *pBuf=NULL;


Func(&pBuf);

//
//do something with "pBuf"
//
.
.
.

//
//Release mem
//
Free(pBuf);
}


2. 指標的陣列:
等同是create 一個指標的陣列
Method1: by Array
Method2: by pointer


#define METHOD_ARRAY


Main()
{
int **pArray=NULL;
int pIntArray[3];
int i;

pArray = (int **)malloc(3*sizeof(int*));

//assign address
for (i=0; i<3; i++)
{
#ifdef METHOD_ARRAY
//
// by Array
//
pArray[i] = &(pIntArray[i]);
#else
//
// by pointer
//
*(pArray+i)= &(pIntArray[i]);
#endif

}

//show
for (i=0; i<3; i++)
{
#ifdef METHOD_ARRAY
//
// by Array
//
printf("%d\n", *(ppValue[i]));
#else
//
// by pointer
//
printf("%d\n", *((int *)*(ppValue+i)));
#endif
}

free(pArray);

}