【发布时间】:2013-08-20 17:00:30
【问题描述】:
以下代码无法编译:
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;
}
为什么需要强制转换?
【问题讨论】:
-
char **与void**不同。 -
因为指向
void*的指针与指向任何其他指针类型的指针(如指向char*的指针)并不通用。void**是指向特定类型的指针:void*。 -
@WhozCraig 您的一行解释非常好。我意识到我的答案不完整(实际上答案不正确)。