(char *)&obj替代项

时间:2019-04-14 19:12:58

标签: c++ c++11 file-handling

我看到这通常用于文件处理(char *)&obj。 自从C ++ 11以来,有许多种转换方法可用,例如静态转换,我们不能在这些方法上使用一种吗?

1 个答案:

答案 0 :(得分:4)

&符号用于获取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 *)&obj换行符用于获取一个char *,该char *可以传递给只希望打印一个char数组的printData函数。

在该示例中,该行

char* dataPtr = (char*)&obj;

可以这样使用reinterpret_cast编写:

char* dataPtr = reinterpret_cast<char*>(&obj);

将执行相同的操作。使用reinterpret_cast而不是神秘的(char *)&obj的一个优点是,当您编写reinterpret_cast时,可以清楚地看到您在代码中进行了某种奇怪的操作,并且可能很危险。