發生在這裏我有被傳遞給另一個函數的函數,但我不知道爲什麼這兩個工作,不產生任何警告。這有什麼函數指針
typedef short (*COMP)(char *, char *);
DATA *bst_get(BST *, char *, COMP);
short cmp(char *a, char *b)
{
if (strstr(a, b))
return 0;
return strcmp(a, b);
}
// Both of these produce the same results
// the difference is '&cmp' vs 'cmp'
data = bst_get(bst, "textA", &cmp);
data = bst_get(bst, "textA", cmp);
那麼哪個是正確的用法呢?有關係嗎?
通常你應該使用'&cmp',但'cmp'也被接受。函數標識符衰減爲指向該函數的指針。 –
@ Jean-BaptisteYunès:「通常你應該使用'&cmp'」 - 爲什麼?使用這個名字是非常好的接受。 – Olaf
這就是我所說的。如果你想要的東西的地址,你必須使用'&東西'的東西,但對於一些特殊的東西(數組,函數)對象的名稱本身代表一個地址... –