下面的代碼無法編譯:交換2個字符串指針與它的參數是一個函數void **
void swap(void **p, void **q) {
void *tmp;
tmp = *p;
*p = *q;
*q = tmp;
}
int main(void) {
char *s[] = {"help" , "please"};
swap(&s[0], &s[1]);
return 0;
}
儘管此代碼編譯並運行就好:
void swap(void **p, void **q) {
void *tmp;
tmp = *p;
*p = *q;
*q = tmp;
}
int main(void) {
char *s[] = {"help" , "please"};
swap((void **) &s[0], (void **) &s[1]);
return 0;
}
爲什麼鑄造必要?
了'字符**'是不一樣的'無效**'。 –
因爲指向'void *'的指針不具有指向任何其他指針類型的指針(如指向'char *'的指針)。一個'void **'是一個指向特定類型的指針:'void *'。 – WhozCraig
http://c-faq.com/ptrs/genericpp.html – FatalError