我碰到一段代碼是如下將函數調用爲fun()和樂趣有什麼區別?
qsort(array, 10, sizeof(int), sort);
這裏排序是再次的功能。但我一直覺得任何被調用的函數在函數名後面應該有()
,或者我錯過了某些東西。
我只是想知道這將如何工作,以及這些調用函數有什麼區別。謝謝!
我碰到一段代碼是如下將函數調用爲fun()和樂趣有什麼區別?
qsort(array, 10, sizeof(int), sort);
這裏排序是再次的功能。但我一直覺得任何被調用的函數在函數名後面應該有()
,或者我錯過了某些東西。
我只是想知道這將如何工作,以及這些調用函數有什麼區別。謝謝!
qsort(array, 10, sizeof(int), sort);
它傳遞一個指向函數「sort」的指針,以便函數「qsort」可以調用該函數。
事實上,'sort'實際上就是'&sort'的簡寫形式 - 編譯器認爲你沒有調用函數,所以唯一有意義的是你試圖傳遞它的地址。 – Wormbo
您正在將函數sort
的指針傳遞給函數qsort
,以便qsort
可以使用該函數作爲比較函數。
的正確語法應包括&
之前sort
(因爲sort
是一個函數,而不是一個指針,所以我們需要引用它),但是編譯器「增加了」爲你反正。
該函數未被調用,它作爲函數指針傳遞。 see Function Pointers in C and C++
如果你看一下在C語法(例如,在C標準),你會發現有寫成()
運營商,這是函數調用操作。它類似於數組下標運算符[]
,因爲它被應用於標識符,在這種情況下是函數的名稱。如果函數的標識符沒有被函數調用操作符遵循,則標識符代表該函數的指針指針。所以現在很清楚,qsort
的最後一個參數是:指向比較函數的指針。無論何時需要比較兩個元素,它都會調用其最後一個arg所指向的函數。
的sort
功能在你的例子被稱爲回調功能,qsort
調用回(幾次,使用不同的參數)。
我相信它被用作指向函數的指針:http://www.newty.de/fpt/index.html – Eimantas
在qsort中,你不是調用函數,而是傳遞「sort」函數的地址所以qsort可以調用它。 –