【发布时间】:2021-12-02 13:53:46
【问题描述】:
int a[2][2] = {{1, 2}, {3, 4}};
cout << a << endl;
cout << *a << endl;
cout << &a[0][0] << endl;
这段代码的输出是:
0x7fff3da96f40
0x7fff3da96f40
0x7fff3da96f40
但是,如果a 是0x7fff3da96f40,那么*a 应该是地址0x7fff3da96f40 中的值,即1。
但是,我们又得到了相同的地址。
为什么会这样?
【问题讨论】:
-
尝试
*a = 0,您会在错误消息中看到*a是什么。这不是整数。 -
a是int (&)[2][2],*a是int(&)[2],a[0][0]是int&。前两个衰减为指针。 -
这是因为
a不是0x7fff3da96f40–a不是指针而是数组。您看到的值是它衰减为指向其第一个元素的指针,&a[0](并且第一个元素也是一个数组,当您打印它时,它衰减为指向 its 第一个元素的指针)。 -
@Jarod42 请原谅我的吹毛求疵,但它们不是参考资料。表达式不能有引用类型。
-
很多时候,当你想“如果 A 为真,那么 B 应该发生,为什么 B 不发生?”,那是因为 A 不为真。
标签: c++ arrays pointers multidimensional-array