为什么`(void *)&`会得到变量的地址?

ano*_*non 4 c++ casting operator-overloading c-strings void-pointers

有人可以解释这背后的逻辑吗?为什么void?例如

#include <iostream>
using namespace std;
int main()
{
    char c;
    cout << (void *)&c;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

chu*_*ill 6

cout << (void *)&c;
Run Code Online (Sandbox Code Playgroud)

获取 的地址c,然后将其强制转换为void*,然后打印指针。

这里的目的是打印变量的地址c。但是当将 a 传递char *std::cout << 它时,它会尝试打印一个以空字符结尾的字符串。为了避免这种情况(并打印实际地址),您必须首先投射到void*


更多解释:

std::ostream::operator<<具有处理和 的重载 (2)。它假设 a将指向某个最终以空字符结尾的字符串。这只是 C 和 C++ 中使用的约定。char *const char*const char*'\0'

您想避免这种情况,而是使用重载 (7)来打印地址。