C 學習筆記 1 1 函式指標

2021-10-23 06:12:40 字數 1706 閱讀 5649

程式執行期間,每個函式都會占用一段連續的記憶體空間。而函式名就是該函式所佔記憶體區域的起始位址(也稱為「入口位址」)。我們可以將函式的入口位址賦給乙個指標變數,使該指標變數指向該函式。然後通過指標變數就可以呼叫這個函式。這種指向函式的指標變數稱為「函式指標」。

型別名(

* 指標變數名)

(引數型別1

, 引數型別2,.

..);

例項:

uint8_t (

* msg)

(uint32_t, uint16_t)

;

c語言快速排序庫函式:

void

qsort

(void

*base,

int nelem, unsugned int width,

int(

*pfcompare)

(const

void

,const

void*)

);

可以對任意型別的陣列進行排序。

對陣列排序,需要知道:

陣列起始位址;

陣列元素的個數;

每個元素的大小(由此可以算出每個元素的位址)

base待排序陣列的起始位址

nelem待排序陣列的元素個數

width待排序陣列的每個元素的大小(以位元組為單位)

pfcompare比較函式的的位址

pfcompare函式指標,它指向乙個「比較函式」。

該比較函式應為以下形式:

int 函式名(const void *elem1, const void *elem2);

比較函式是程式設計師自己編寫的。

排序就是乙個不斷比較並交換位置的過程。

qsort函式在執行期間,會通過pfcompare指標呼叫「比較函式」,呼叫時將要比較的兩個元素位址傳給「比較函式」,然後根據「比較函式」返回值判斷兩個元素哪個更應該排在前面。

比較函式編寫規則:

如果 * elem1應該排在 * elem2前面,則函式返回值是負整數;

如果 * elem1和 * elem2哪個排在前面都行,那麼函式返回0;

如果 * elem1應該排在 * elem2後面,則函式返回值是正整數。

#include

#include

intmycompare

(const

void

*elem1,

const

void

*elem2)

#define num 5

intmain()

;qsort

(an, num,

sizeof

(unsigned

int)

, mycompare)

;for

(int i =

0; i < num; i++

)return0;

}

輸出結果:

10 11 123 4 8

站在巨人的肩上

北京大學資訊科技學院《程式設計實習》

C 學習筆記 函式指標

1 c 指標函式基礎 函式是有位址的,它表示函式執行的入口。我們知道位址值並沒有用,但是可以將位址值當做實參傳入到其它函式中,這可以在不同的時期呼叫不同的函式。函式指標包括三點 如何獲取函式位址,如何申明函式指標,如何呼叫函式。簡單示例 include double betsy int double...

C 學習筆記 函式指標與指標函式

函式指標 指向函式的指標,首先它是指標變數 同指向乙個整形變數 字元 陣列一樣 其次它指向乙個函式 位址 宣告 函式型別 指標變數名 形參列表 函式型別,指明函式的返回型別,由於 優先順序高於 所以指標變數名外的括號不能少,後面形參列表表示指標變數指向的函式所帶的引數列表。上面相當於用函式指標p,代...

指標與陣列(C 學習筆記 11)

1 定義指向陣列元素的指標 每個陣列元素相當於乙個變數,所以定義指向陣列元素的指標與定義指向變數的指標方法相同。例如 int ia 5 定義包含5個陣列元素的整型陣列ia int pi 定義指向整型變數的指標變數pi pi ia 0 使指標變數pi指向陣列的第0個元素 pi ia 0 pi ia 2...