[C] 關於pointer與型態宣告

複習一下pointer...

(1)pointer: 指標, 用來儲存資料物件的記憶體位址.
ex.
int var    = 8;
int *ptr   = &var;
//儲存var位址的指標變數ptr(或說是指向變數var的指標ptr), 其var 為int type
int **pptr = &ptr;   <=> int* (*pptr) = &ptr;
//儲存ptr位址的指標變數pptr, 其中ptr為int* type

(2)*VARIABLE_NAME 可以取出所指向的位址物件的數值.
ex.
printf("   *ptr=%d\n", *ptr); // 8
printf(" *pptr=%u\n", *pptr); // memory address of var
NOTICE 1: *pptr得到的是所存位址(即ptr的位址)的數值(ptr存的是var的位址)
NOTICE 2: 不管宣告時有幾個'*', 指標變數,存的就是資料物件的位址.

printf("**pptr=%d\n", **pptr); //8

另外就是宣告的型態:
(I)   int arr[8][8];  //int array的array(II)  int **pptr;    //指向int type pointer的pointer(III) int *parr[8]; //8個指向 int type pointer的array(IV) int (*parr)[8]; //指向int array的pointer(V)  int *parr2[7][8]; //指向int type pointer的7x8array(VI) int (*parr2)[7][8]; //指向7x8array的pointer(VII)int (*parr2[7])[8]; //7個指向int type array的array
int *parr[7][8];  表示parr是一個有7個elements的array, 每個element皆有8個指向int的指標陣列; in brief, 一個7x8指向int的指標陣列.

另外就是函數指標:
char *pfunc();        //表示一個pfunc函式, 回傳指向char的指標
char (*pfunc)();     //表示一個pfunc指標, 指向一個回傳char型態的函式
char (*pfunc[3])();//表示3個指向回傳為char型態的函式的陣列

void (*pfunc)(char*); //表示一個函式指標, 指向一個無回傳值且帶入參數為一個指向char型態的函式.
void *pfunc(char*); //表示一個回傳值為指標的函式pfunc, 其傳入參數為指向char型態.
void demo(void (*pfunc)(char*), char*); //表示一個函式demo, 其傳入參數為函式指標與一個指向char.
可以用typedef來簡化函式指標: typedef void (*PFUNC)(char*);
這樣 void demo(void (*pfunc)(char*), char*); => void demo(PFUNC, char*);

嗯, 希望下此碰到pointer不會再這麼毛...

Comments

Popular posts from this blog

股票評價(Stock Valuation) - 股利折現模型

openwrt feed的使用

How to convert Markdown into HTML