函式與指標的關係與應用
阿新 • • 發佈:2020-12-11
作為函式引數的指標
void Swap(int *a , int *b){
int tmp = *a ;
*a = *b;
*b = temp ;
}
// 解引用:在使用指標時對指標物件執行操作的方法
- 在C語言中函式只能傳遞引數,使用引數指標,可以大大增加我們精確控制傳遞引數的能力;除此之外,只傳遞一個指標而不是一個數據的完整副本可以大大地節省記憶體空間
- 但是需要在函式中解引用按引用呼叫的引數
作為函式引數指向指標的指標
// 連結串列的移除函式定義
int ListRemoNext(LIST *list,LISTELMT *element , void **daTa);
{
// 函式部分語句
*daTa = list -> head -> data ;
}
// 使用該函式
retVal = ListRemoNext(&list , element , (void **)&iptr);
// 也可以這樣使用,但是為了統一不建議
retVal = ListRemoNext(&list , element , (void *)&iptr);
- 函式想改變傳遞給它的指標,所以就使用二級指標來實現
泛型指標與型別轉換
泛型指標
- C語言只允許相同型別的指標之間進行轉換
- 使用泛型指標則可以轉換為任何型別的指標
void Swap(void *a , void *b)
{
void temp = *a ;
*a = *b ;
*b = temp ;
}
型別轉換
- 對於泛型指標來說型別轉換很重要,只有告訴泛型指標通過何種型別來訪問地址時泛型指標才能正確取到值。因為泛型指標無法告知編譯器它的資料型別,也就不知道有多少個位元組會被訪問、不知道如何解析位元組
- 指標型別的轉換會破壞計算本身的對齊方式,很多計算機對對齊方式有要求,以便耨寫硬體的優化可以使訪問記憶體更有效率
函式指標
- 函式指標是指向可執行程式碼塊或呼叫可執行程式碼段資訊塊的指標
- 函式指標將函式當作普通指標那樣儲存和管理
- 宣告形式:
函式型別 (* 函式名)(資料型別1 變數1,...);
- 例項與使用
int (* match)(void *val);
match = match_int;
retVal = match( &val );