Fai*_*eer 1 c++ pointers char variable-address
我们怎样才能显示char变量的地址?我找到了一种使用类型转换的解决方案,通过将其转换为int或float或void等,然后使用指针显示地址.但是没有类型铸造的特定解决方案还有其他替代方案吗?使用像指针一样
char var = 'a';
char* ptr;
ptr = &var;
cout << ptr;
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,即使指针指向var的地址,但显示var的值.为什么?如果是这样那么我们如何使用指针获取var的地址?不使用类型铸造
cout << "Address of var = " << static_cast<void*>(&var) << endl;
Run Code Online (Sandbox Code Playgroud)
或者我们必须为特定问题超载任何操作员?
你需要编写强制转换的唯一原因是因为std::ostream有一个特殊的重载char *,假定给定的指针指向一个以零结尾的字符数组的第一个元素,并且很乐意尝试遍历该数组直到它达到零.
不幸的是,这意味着您不能简单地传递单个字符的地址并打印该地址的值,这就是您需要强制转换的原因.对于所有其他(非字符)指针,std::ostream已经打印了指针值的数字表示.
没有任何东西你可以"做",但也没有真正的问题,因为你已经发现了解决方案.如果您处于通用设置并且想要打印对象指针,那么只需添加一个转换void *,它将适用于所有输入类型.这种行为std::ostream是为了方便设计选择的结果,使绝大多数用例易于使用,代价是使您的特定用例更加冗长.