2009年11月8日 星期日

C語言筆記 - 指標變數

*指標 --
學習 C 語言最重要就是指標的觀念; 指標最常用於陣列的使用;
Example one ---
int buf[5];
int *ptr = buf; //宣告指標 *ptr 初始化為 buf[0] 的位址
or
int *ptr;
ptr = &buf[0]; //取得 buf[0] 的位址給指標 ptr

Example two ---
int i, *ptr, buf[5];
ptr = &buf[0];
i = ptr; // i = buf[0] 所指的位址
i = *ptr; // i = buf[0] 內的值

Example three ---
續上...
i = *ptr++; // i = 指標移動到下一個位址, 即 buf[1] 內的值
i = *(ptr+1); // i = 指標位址加 1 , 即 buf[1] 內的值
ptr += 2; // 指標位址加 2, 即 &buf[2]

Example four ---
二維陣列
int buf[3][5];
int *ptr[3]; // 宣告一個二維陣列指標變數, 且為連續三個存放位址空間指標變數
ptr = buf; // 指標 *ptr 指向 buf[0][0] 的位址

亦即:
ptr[0] --> buf[0][0], buf[0][1], buf[0][2], buf[0][3], buf[0][4]
ptr[1] --> buf[1][0], buf[1][1], buf[1][2], buf[1][3], buf[1][4]
ptr[2] --> buf[2][0], buf[2][1], buf[2][2], buf[2][3], buf[2][4]

ptr[0] 存放 buf[0][0] 的位址
ptr[1] 存放 buf[1][0] 的位址
ptr[2] 存放 buf[2][0] 的位址

也可宣告為 int **ptr; // 此表示單純宣告一個二維陣列的指標變數

二維陣列指標變數的應用 ---

*(*(ptr+i)+j) // 若 i =1, j=2 , 則所指位址為 &buf[1][2]

指標也可指向函數 ---
*pb = sub; // sub() 為一函數, 指標 *pb 指向 sub() 所在位址


沒有留言: