此代码的作者声明(long)tab
返回选项卡的地址。这是真的吗?如果是的话,为什么会这样呢?
char tab []= "PJC"
cout << " tab = " << tab << ", address: " << (long)tab << "\n" << endl;
答案 0 :(得分:5)
是的,这是真的。考虑C / C ++中的原始数组,以便它们的名称是指向第一个元素的指针。所以,你可以写:
char tab[] = "PJC";
char c = *(tab + 1); // c == J
由于指针不超过表示内存中地址的整数值,因此将指针转换为long会打印出地址值。
您必须确保整数将包含所有值。指针始终与字大小匹配,因此在32位CPU上,指针为4字节,在64位中为8字节,您需要64位整数才能有溢出 - 具体类型取决于系统(可能是long long
)。您可以使用intptr_t(感谢@Avt)来存储指针值。
答案 1 :(得分:1)
Typecasting
变量会改变其解释,但实际值保持不变。如果您要使用格式说明符%x
打印该值,那么您将始终获得相同的结果,您使用的类型组合无关紧要。
在这种情况下,tab
是char*
,它只是该位置的“地址”。
答案 2 :(得分:0)
您应该转到void*
以获取地址。运行以下检查
char tab []= "PJC"
cout << " tab = " << tab << ", address1: " << (void*)tab << ", address2: " << (long)tab << "\n" << endl;
但请记住,结果取决于架构!