C++中void指针的比较

Comparison between void pointers in C++

void指针指向的内存大小是多少?

在下面的示例中,我正在比较两个指向相同“原始数据”但类型不同、大小不同的空指针...它如何工作?它是否链接到 == 运算符?

#include <iostream>

using namespace std;

int main()
{
    char a = 'a';
    int b = 97;
    if ((void*)a == (void*)b){
        cout << sizeof(a) << sizeof(b) << endl;
    }
}

I'm comparing two void pointer that are pointing to the same "raw data" but with different type so different size...how it can works? Is it linked to the == operator?

这不是你在做什么。您将 charint 值解释为指向 void 的指针。在这种情况下,大小根本无关紧要。

您很好地展示了为什么不使用 C 风格强制转换的原因之一 - 目前尚不清楚它到底在做什么。可以找到规则,例如在 cppreference 上。在您的情况下,它使用 reinterpret_cast 如果您首先在代码中看到它,这应该是一个危险信号。

将整数转换为指针是一种指向特定内存地址的方法,这与您想要的相去甚远。但是比较很可能是正确的,因为 'a' 通常是 97 (0x61)。所以你实际上是在问 0x61==0x61.

回答你的问题

What's the size of the pointed memory by a void pointer?

,这与您发布的代码无关,它是特定于平台的,很可能是 4 或 8 个字节。