为什么`(void*)&`会得到变量的地址?
有人可以解释这背后的逻辑吗?为什么void?例如
#include <iostream>
using namespace std;
int main()
{
char c;
cout << (void *)&c;
return 0;
}
回答
cout << (void *)&c;
获取 的地址c,然后将其强制转换为void*,然后打印指针。
这里的目的是打印变量的地址c。但是当将 a 传递char *给std::cout << 它时,它会尝试打印一个以空字符结尾的字符串。为了避免这种情况(并打印实际地址),您必须首先投射到void*。
更多解释:
std::ostream::operator<<具有处理和 的重载 (2)。它假设 a将指向某个最终以空字符结尾的字符串。这只是 C 和 C++ 中使用的约定。char *const char*const char*' '
您想避免这种情况,而是使用重载 (7)来打印地址。