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?
这不是你在做什么。您将 char
和 int
值解释为指向 void
的指针。在这种情况下,大小根本无关紧要。
您很好地展示了为什么不使用 C 风格强制转换的原因之一 - 目前尚不清楚它到底在做什么。可以找到规则,例如在 cppreference 上。在您的情况下,它使用 reinterpret_cast
如果您首先在代码中看到它,这应该是一个危险信号。
将整数转换为指针是一种指向特定内存地址的方法,这与您想要的相去甚远。但是比较很可能是正确的,因为 'a'
通常是 97 (0x61)。所以你实际上是在问 0x61==0x61
.
回答你的问题
What's the size of the pointed memory by a void pointer?
,这与您发布的代码无关,它是特定于平台的,很可能是 4 或 8 个字节。
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?
这不是你在做什么。您将 char
和 int
值解释为指向 void
的指针。在这种情况下,大小根本无关紧要。
您很好地展示了为什么不使用 C 风格强制转换的原因之一 - 目前尚不清楚它到底在做什么。可以找到规则,例如在 cppreference 上。在您的情况下,它使用 reinterpret_cast
如果您首先在代码中看到它,这应该是一个危险信号。
将整数转换为指针是一种指向特定内存地址的方法,这与您想要的相去甚远。但是比较很可能是正确的,因为 'a'
通常是 97 (0x61)。所以你实际上是在问 0x61==0x61
.
回答你的问题
What's the size of the pointed memory by a void pointer?
,这与您发布的代码无关,它是特定于平台的,很可能是 4 或 8 个字节。