此代码的作者声明(long)tab返回选项卡的地址.这是真的吗?如果是的话,为什么会这样呢?
char tab []= "PJC"
cout << " tab = " << tab << ", address: " << (long)tab << "\n" << endl;
Run Code Online (Sandbox Code Playgroud)
对,是真的.考虑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)来存储指针值.