gpt4 book ai didi

c++ - 二维数组如何存储在内存中?

转载 作者:太空狗 更新时间:2023-10-29 23:35:24 26 4
gpt4 key购买 nike

#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[101][101];
a[2][0]=10;
cout<<a+2<<endl;
cout<<*(a+2)<<endl;
cout<<*(*(a+2));
return 0;
}

为什么a+2和*(a+2)的值一样?提前致谢!

最佳答案

a是一个二维数组,也就是数组的数组。但在适当的上下文中使用时,它衰减为指向数组的指针。所以:

  • a+2 , a衰减为指向大小为 101 的 int 数组的指针。当您将 is 传递给 ostream 时,您将获得该数组第一个元素的地址,即 &(a[2][0])
  • *(a+2)定义 a[2] :它是一个大小为 101 的数组,从 a[2][0] 开始.它衰减为一个指向 int 的指针,当你将它传递给一个 ostream 时,你会得到它的第一个元素的地址,它仍然是 &(a[2][0])
  • **(a+2)定义 a[2][0] .当您将它传递给 ostream 时,您会得到它的 int 值,这里是 10。

但要注意:a + 2a[2]都是指向同一地址的指针(static_cast<void *>(a+2)static_cast<void *>(a[2]) 相同),但它们是指向不同类型的指针:第一个指向大小为 101 的 int 数组,第二个指向 int。

关于c++ - 二维数组如何存储在内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38204677/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com