我正在做考试复习,其中一个问题说这个代码有问题,我应该修复它.我知道它与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!”);
}
}
Run Code Online (Sandbox Code Playgroud)
您需要取消引用指针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!");
}
Run Code Online (Sandbox Code Playgroud)