我如何投射这些无效指针?

时间:2014-06-26 21:48:10

标签: c

我正在做考试复习,其中一个问题说这个代码有问题我应该修复它。我知道它与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!”);
    }
}

1 个答案:

答案 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!");
}