2017-10-28 94 views
4

我剛剛在a coursera lecture的分鐘1:06提出了這段代碼。它有什麼作用?這個C指針代碼是做什麼的?

int (*cmp)(char*, char*); 
+1

一般來說,我覺得這是一個相當不錯的指針解釋:http://shop.oreilly.com/product/0636920028000.do – mko

+0

[C函數指針語法](https:// stackoverflow。 com/questions/14114749/c-function-pointer-syntax) – dandan78

回答

10

這是一個指向其中函數返回int,並採取作爲參數2字符指針的函數。


的基本規則可以歸結爲幾點: -

有三個簡單的步驟如下:

  • 與未知元素開始,以螺旋/順時針方向移動; ecountering以下元素在與對應的英文語句代替它:[X] or []
    1. 陣列X大小...或數組未定義大小... (type1, type2)
    2. 函數傳遞type1type2回... *
    3. 指針指向...繼續以螺旋/順時針方向執行此操作,直到所有標記都被覆蓋。首先解決任何括號內的問題!

參考: 1. Clockwise-rule 2. right-left rule

6

當你讀到C聲明你必須閱讀他們butrophedonically(古希臘的石頭寫的常見方式)。

pointer to 
    function that 
    has (char*, char*) type parameters as input 
    and int as output 

編輯:

+3

LOL,Upvote for reference –

1

您粘貼的代碼實際上是指向一個功能。該功能的prototype可能是: int cmp (char*, char*);

有三個部分在此函數:返回類型爲整數,函數的名稱是cmp並且有兩個參數,所有這些都指向一個字符(數組)。具體來說,該函數用於排序,例如,如果第一個參數小於第二個參數,則該函數將返回一個負數,如果相等,則返回零,如果大於則返回一個正數。例如,如果我有以下代碼:

char c1 = 'a'; 
char c2 = 'b'; 
int result = cmp(&c1, &c2); 

然後結果將是一個負數,例如, -1,因爲'a'小於'b'。在上面的函數調用中,我在每個參數之前添加了&,因爲參數數據類型是指向該字符的指針/引用。 &是獲取變量地址的操作。

關於您提供的代碼,實際上在功能cmp的名稱前面還有一個額外的*。這意味着你想獲得整個函數的引用,而不是任何單個變量或數組。例如,下面是功能qsort的在C原型:

void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))

這個函數的第三個參數其實是非常相似的,你所提供的代碼。這樣做的原因是您可以直接將整個函數傳遞給另一個函數,例如qsort作爲參數。

看看這個link的有關C.

我希望這回答了你的問題指針的細節。