gpt4 book ai didi

C++,数组中的地址

转载 作者:太空宇宙 更新时间:2023-11-04 06:06:55 25 4
gpt4 key购买 nike

我有一些关于 C++ 中的地址的有趣问题。我有这样的代码:

#include <iostream>
#include <cstdlib>
using namespace std;

int main() {
int N = 50 + rand() % 151;
int arr[N];
int arr2[N];
int *ptr1;
ptr1 = &arr[0];

for(int i = 0; i < N; i++){
cout << "Address1: "<< &arr[i]<< "\t" << "Address2: " << &arr2[i] << endl;
}
}

这段代码可以工作,但是地址分配让我担心。这样的输出合法吗?我认为这有点奇怪,第二个数组在内存中的位置比第一个数组更早。如果有人知道问题是什么,请解释一下出了什么问题,因为根据定义顺序,第一个必须是第一个数组的地址,而不是第二个数组的地址。这是在 Ubuntu 中用 g++ 编译的。

Address1: 0xbf9ab1b8    Address2: 0xbf9ab028
Address1: 0xbf9ab1bc Address2: 0xbf9ab02c
Address1: 0xbf9ab1c0 Address2: 0xbf9ab030
Address1: 0xbf9ab1c4 Address2: 0xbf9ab034
Address1: 0xbf9ab1c8 Address2: 0xbf9ab038
Address1: 0xbf9ab1cc Address2: 0xbf9ab03c
Address1: 0xbf9ab1d0 Address2: 0xbf9ab040
Address1: 0xbf9ab1d4 Address2: 0xbf9ab044
Address1: 0xbf9ab1d8 Address2: 0xbf9ab048
Address1: 0xbf9ab1dc Address2: 0xbf9ab04c
Address1: 0xbf9ab1e0 Address2: 0xbf9ab050
Address1: 0xbf9ab1e4 Address2: 0xbf9ab054
...

最佳答案

I think that it is kind of wierd, that second array, locates earlier in memory than 1st array.

事实并非如此。这是完全正常的。

according to defenition order, first must be adresses of 1st array, than adresses of second.

我不知道你从哪里听说 block 作用域中的对象地址根据定义顺序递增。一般来说,由于堆栈工作的本质,事实恰恰相反。

无论如何,这对你来说都不重要;您的计算机可以将对象放置在任何它想要的地方。

拿起一本有关计算机体系结构的书籍以获取更多信息。

关于C++,数组中的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34138463/

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