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

use*_*889 0 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!”);
    }
}
Run Code Online (Sandbox Code Playgroud)

hac*_*cks 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!");
}
Run Code Online (Sandbox Code Playgroud)

  • ``Double:%.2fl \n"`表示指针指向一个`double`对象,在这种情况下你必须使用`*(double*)vp`. (2认同)