C | 使用 sizeof() 查找 void 指针指向的值的大小

Ran*_*rer 2 c pointers sizeof void void-pointers

我尝试使用 sizeof() 来查找 void 指针指向的值的大小,我想用它来打印该值。

这段代码

    int num = 5;
    void *voidPtr;
    voidPtr = #
    printf("%d", sizeof(*voidPtr));
Run Code Online (Sandbox Code Playgroud)

打印,1。我怎样才能打印4?

如果有任何其他方法来打印 void 指针的值,请告诉我

提前致谢。

Eri*_*hil 7

指针的值仅传达对象的起始地址,而不传达有关其大小的任何信息。

如果指针是完整类型,则指针的类型本质上传达有关其指向的对象的大小的信息。然而,void它是不完整的,并且 avoid *没有提供有关它源自的对象的大小的信息(除了可能通过标准 C 的扩展和调试功能)。

一般来说,如果您的程序需要知道 avoid *指向的内容的大小,它必须自行跟踪该信息。


P__*_*J__ 5

  1. *voidPtr在标准 C 中无效。它是 GCC 扩展,这就是 的sizeof(*voidptr)原因1。任何其他(非 GCC 系列)编译器都不会编译此代码。

  2. %d打印格式错误size_t。你应该改用%zu

  3. C中没有办法确定指针引用的对象void大小