我看到这通常用于文件处理,(char*)&obj。有这么多的铸造方法,因为C++11,像静态铸造,我们不能使用其中之一?
发布于 2019-04-14 19:50:30
这个&标志在那儿是为了记下obj的地址。
示例:
#include <cstdio>
void printData(const char* p, int n) {
for(int i = 0; i < n; i++)
printf("byte %2d : %d\n", i, (int)p[i]);
}
struct DataStruct {
int x;
int y;
};
int main() {
DataStruct obj;
obj.x = 5;
obj.y = 257;
char* dataPtr = (char*)&obj;
printData(dataPtr, sizeof(DataStruct));
return 0;
}其中,( char* )&用于获取一个char*,该char*可以传递给printData函数,该函数只需要打印一个字符数组。
在这个例子中,行
char* dataPtr = (char*)&obj;相反,可以使用这样的reinterpret_cast来编写:
char* dataPtr = reinterpret_cast<char*>(&obj);也会做同样的事。使用reinterpret_cast而不是神秘的(char*)&obj的一个优点是,当您编写reinterpret_cast时,您在代码中的那个点正在做一些奇怪的、可能是危险的事情,这一点变得更加明显。
https://stackoverflow.com/questions/55679079
复制相似问题