2016-09-20 53 views
0
double d = 43.56; 
int m = d; 
cout<<(char *)&m<<endl; //works fine, it prints: + = 43 
cout<<(char *)m<<endl; //this doesn't work, char can't be made into a pointer 
cout<<reinterpret_cast<char *>(&m)<<endl; //works fine, prints: + 
cout<<static_cast<char *>(&m)<<endl; //Does not work 

我的问题是,为什么最后一行代码不起作用?类型转换时出错。混乱

编译器错误消息:从int *无效的static_cast到char *类型

不应该的static_cast能转换吗?

在此先感谢。

+0

你期待它打印'43'作为字符串吗? – LogicStuff

+0

我不明白。为什么'(char *)m'没有工作?我们经常在嵌入式系统中使用它来为指针分配硬件组件的地址。 –

+0

您可能会将铸造与'operator <<'的可用重载混淆。例如'cout'将打印一个char *'作为一个字符串;但是'void *'作为指针。 –

回答

1

Here是可以用static_cast完成什么的完整列表。并且 没有选项可以将指针转换为一个类来指向另一个不相关的类。只是因为这不是标准的C++行为。
但是仍然可以使用c-style cast,reinterpret_cast甚至可以使用union来“铸造”。