2012-05-28 35 views
3

我碰到一段代碼是如下將函數調用爲fun()和樂趣有什麼區別?

qsort(array, 10, sizeof(int), sort);

這裏排序是再次的功能。但我一直覺得任何被調用的函數在函數名後面應該有(),或者我錯過了某些東西。

我只是想知道這將如何工作,以及這些調用函數有什麼區別。謝謝!

+0

我相信它被用作指向函數的指針:http://www.newty.de/fpt/index.html – Eimantas

+0

在qsort中,你不是調用函數,而是傳遞「sort」函數的地址所以qsort可以調用它。 –

回答

2
qsort(array, 10, sizeof(int), sort); 

它傳遞一個指向函數「sort」的指針,以便函數「qsort」可以調用該函數。

+0

事實上,'sort'實際上就是'&sort'的簡寫形式 - 編譯器認爲你沒有調用函數,所以唯一有意義的是你試圖傳遞它的地址。 – Wormbo

1

您正在將函數sort的指針傳遞給函數qsort,以便qsort可以使用該函數作爲比較函數。

的正確語法應包括&之前sort(因爲sort是一個函數,而不是一個指針,所以我們需要引用它),但是編譯器「增加了」爲你反正。

1

如果你看一下在C語法(例如,在C標準),你會發現有寫成()運營商,這是函數調用操作。它類似於數組下標運算符[],因爲它被應用於標識符,在這種情況下是函數的名稱。如果函數的標識符沒有被函數調用操作符遵循,則標識符代表該函數的指針指針。所以現在很清楚,qsort的最後一個參數是:指向比較函數的指針。無論何時需要比較兩個元素,它都會調用其最後一個arg所指向的函數。

sort功能在你的例子被稱爲回調功能,qsort調用回(幾次,使用不同的參數)。

相關問題