2014-01-21 95 views
2

我正在讀K & R書(第一次)我遇到了一個使用指針的函數。K&R C函數指針

函數調用

qsort(
    (void **)lineptr, 
    0, 
    nlines-1, 
    (int (*)(void *,void *)) (numeric ? numcmp : strcmp) 
); 

我的理解是什麼,基於strcmpnumcmp傳遞的numeric要麼地址,地址是需要的功能類型強制轉換爲(int (*)(void *,void *))

功能確定指標

void qsort(void *v[],int left,int right, int (*comp)(void *, void *)) 

所以是我關於函數指針的解釋正確的?

+2

你能指定我們的問題嗎?或者我是唯一一個沒有真正得到的人,你在問什麼? – dhein

+2

是的,解釋是正確的 – hroptatyr

回答

5

是的,沒錯。

由於strcmp()需要const char *參數,因此需要強制轉換,但它們可以安全轉換爲void *

如果你看看the current manual page for qsort()你可以看到,在回調的論據確實應該const void *,不只是void *但太(只要回調對待指針指向const,當然),這是一個安全的轉換。

+0

這隻適用於指針正確嗎?,如果strcmp()返回其他的'int',你不能這樣做。 – this

+0

@self。正確,至少部分是因爲不同類型的尺寸變化風險增加。 – unwind