我正在做考试复习,其中一个问题说这个代码有问题我应该修复它。我知道它与void指针有关,但无法弄明白。有谁知道我会做什么?
void whatAmI(void *vp, int n) {
if (n == 1) {
printf(“Integer: %d\n”, vp);
} else if (n == 2) {
printf(“Double: %.2fl\n”, vp);
} else {
printf(“Unknown type!”);
}
}
答案 0 :(得分:6)
您需要取消引用指针vp
以打印存储在vp
指向的位置的值。但是void
指针不能被取消引用(这样做会调用未定义的行为),所以你需要强制转换它:
void whatAmI(void *vp, int n) {
if (n == 1) {
printf("Integer: %d\n", *(int *)vp);
} else if (n == 2) {
printf("Double: %.2fl\n", *(double *)vp);
} else {
printf("Unknown type!");
}