【发布时间】:2016-07-27 05:12:53
【问题描述】:
最近开始学习c++中的指针和引用(不只是平时的使用,各种方式,近期不想遇到问题)。
从我的角度来看,一维静态分配数组类似于 int* const 指针。我的问题是,当我使用指针动态分配时,指针本身具有除第一个元素之外的其他内存地址,而在一维数组中并非如此。这是一个例子
int a[5];
cout<<&a<<" "<<&a[0]<<"\n";
int* t=new int[10];
cout<<&t<<" "<<&t[0]<<"\n";
输出是:
0x6afed0 0x6afed0
0x6afecc 0xcb0e40
我想不出一维数组是如何存储的,在 1 个 4 字节的块中,您可以存储一个值或一个地址。 我还尝试了2D阵列,还有更多的交叉点。
q = new int*[10];
for (i=0;i<10;i++)
q[i] = new int[i+1];
cout<<&q<<" "<<&q[0]<<" "<<&q[0][0]<<"\n";
int b[10][10];
cout<<&b<<" "<<&b[0]<<" "<<&b[0][0]<<"\n";
输出:
0x6afee4 0xe40e40 0xe41240
0x6afd54 0x6afd54 0x6afd54
如果有人能启发我并解释这些数组是如何存储的,我将不胜感激。
编辑:更具体地说,我知道如何存储由指针使用 new 关键字动态创建的数组是合乎逻辑的。但是 &a 和 &a[0] 如何具有相同的值,如果 a 应该存储 a[0] 的地址。那块内存(&a)存储什么然后呢? a[0] 的值或 a[0] 的地址]。希望我在我的问题是什么。
【问题讨论】:
-
查看矿井的答案:stackoverflow.com/questions/23581342/… span>
-
感谢您的回答。但是正如 arnobpl 所说,您会感到困惑,因为您可以像指针一样在数组名称上使用 *,因此您认为它们是相同的(它们不是)。
-
我明白他们不一样,我没有说别的。也许我的答案并不完全清楚。 span>
-
对不起,当我说“你”时,我指的是一般人,而不是你:P
标签: c++ pointers multidimensional-array