使用以下代码,打印出两个不同的地址。谁能解释为什么?我不是最精通指针,但我认为他们会给出相同的地址。
float (*arrayName)[2][4][4]
auto address1 = (**arrayName)[1]; // 0x10
auto address2 = (*arrayName)[1][0]; // 0x40
std::cout << "Address1: " << address1 << std::endl;
std::cout << "Address2: " << address1 << std::endl;
0x40 是我要找的地址。只是不明白为什么我得到两个不同的答案。
我本以为两者都会给我 0x40 的答案,但其中一个没有。在在线 C++ 编译器上尝试了这段代码,两者都给了我 0x10 的地址。然而,在我的开发 RHEL7 虚拟机上,我得到 0x10 和预期的 0x40 地址。
表达式
*x
和 (x)[0]
是可以互换的,所以让我们将所有内容转换为一种形式:
(**arrayName)[1] = (*(arrayName[0]))[1] = arrayName[0][0][1]
(*arrayName)[1][0] = (arrayName[0][1][0]
这两种表达方式明显不同。