如何打印const void *的值

时间:2012-11-22 18:22:33

标签: c++

#include <iostream>
using namespace std;

void fn(const void *l) {
    // How to print the value of l. The below line is giving error
    cout << "***" << *l;
}

int main() {
    cout << "Hello World!";
    int d = 5;

    fn((char *) &d);
    return 0;
}

错误:

在函数'void fn(const void *)'中: 第8行:错误:'const void *'不是指向对象的指针类型 由于-Wfatal-errors而导致编译终止。

尝试施法如下图所示。它没有帮助。请提供建议。

#include <iostream>
using namespace std;

void fn(const void *l) {
    // How to print the value of l. The below line is giving error
    int *pInt = static_cast<char*>(l);
    cout << *pInt;
}

int main() {
    cout << "Hello World!";
    int d = 5;

    fn((char *) &d);
    return 0;
}

在函数'void fn(const void *)'中: 第9行:错误:从'const void *'类型的static_cast到'char *'类型转换为constness 由于-Wfatal-errors

,编译终止

4 个答案:

答案 0 :(得分:6)

您想要显示指针本身的值,还是它所指向的值?在第一种情况下,简单

 cout << p;

就足够了。如果你想实现第二件事 - 它是不可能的 - 指针指向 void ,并且它不能被解除引用,因为编译器不知道它背后隐藏的值的类型。

答案 1 :(得分:5)

你做不到。除非您将void指针解释为某种东西。

把自己放在功能的鞋子里:我给你一个指向“某事”的指针。你不知道那是什么东西。我告诉你打印那个东西。你做什么的?

答案 2 :(得分:1)

在取消引用void指针时,标准需要显式转换。

不仅编译器本身而且标准也不允许这样做。

答案 3 :(得分:-6)

cout << "***" << *(int*)l ;