什么铸造char数组到多久?

Yod*_*oda 0 c++ casting

此代码的作者声明(long)tab返回选项卡的地址.这是真的吗?如果是的话,为什么会这样呢?

  char tab []= "PJC"    
  cout << " tab = " << tab << ", address: " << (long)tab << "\n" << endl;
Run Code Online (Sandbox Code Playgroud)

Ale*_*nko 5

对,是真的.考虑C/C++中的原始数组,以便它们的名称是指向第一个元素的指针.所以,你可以写:

char tab[] = "PJC";
char c = *(tab + 1); // c ==  J
Run Code Online (Sandbox Code Playgroud)

由于指针不超过表示内存中地址的整数值,因此将指针转换为long将打印出地址值.

您必须确保整数将包含所有值.指针总是匹配字大小,所以在32位CPU上,指针是4字节,在64位中它是8字节,你需要64位整数不要溢出 - 它究竟是什么类型取决于系统(可能是long long).您可以使用intptr_t(感谢@Avt)来存储指针值.