首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(char*)&obj备选方案

(char*)&obj备选方案
EN

Stack Overflow用户
提问于 2019-04-14 19:12:57
回答 1查看 133关注 0票数 2

我看到这通常用于文件处理,(char*)&obj。有这么多的铸造方法,因为C++11,像静态铸造,我们不能使用其中之一?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-14 19:50:30

这个&标志在那儿是为了记下obj的地址。

示例:

代码语言:javascript
复制
#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函数,该函数只需要打印一个字符数组。

在这个例子中,行

代码语言:javascript
复制
char* dataPtr = (char*)&obj;

相反,可以使用这样的reinterpret_cast来编写:

代码语言:javascript
复制
char* dataPtr = reinterpret_cast<char*>(&obj);

也会做同样的事。使用reinterpret_cast而不是神秘的(char*)&obj的一个优点是,当您编写reinterpret_cast时,您在代码中的那个点正在做一些奇怪的、可能是危险的事情,这一点变得更加明显。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55679079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档