C++;,数组中的地址 我有一些关于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; } }

C++;,数组中的地址 我有一些关于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; } },c++,arrays,linux,memory,g++,C++,Arrays,Linux,Memory,G++,我认为它是一种wierd,第二个数组,在内存中的位置比第一个数组早 不是。这完全正常 根据防御顺序,第一个必须是第一个数组的地址,而不是第二个数组的地址 我不知道您从哪里听说块范围中对象的地址根据定义顺序递增。一般来说,由于堆栈工作的性质,实际情况正好相反 不管怎样,这对你来说都不重要;您的计算机可以将对象放置在它想要的任何位置 拿起一本关于计算机体系结构的书,了解更多信息。投票被否决,因为这里根本没有进行任何研究。实际上,这些值尊重定义顺序,因为堆栈向下增长。但是,无论如何,数据放在堆栈上的顺

我认为它是一种wierd,第二个数组,在内存中的位置比第一个数组早

不是。这完全正常

根据防御顺序,第一个必须是第一个数组的地址,而不是第二个数组的地址

我不知道您从哪里听说块范围中对象的地址根据定义顺序递增。一般来说,由于堆栈工作的性质,实际情况正好相反

不管怎样,这对你来说都不重要;您的计算机可以将对象放置在它想要的任何位置


拿起一本关于计算机体系结构的书,了解更多信息。

投票被否决,因为这里根本没有进行任何研究。实际上,这些值尊重定义顺序,因为堆栈向下增长。但是,无论如何,数据放在堆栈上的顺序不是标准的。@杰克,我听说有一些堆栈向上生长的体系结构。@ RSAHU:除非另有说明,我假设一个标准的x86架构,任何标准的C++编译器都没有人学会初始化。代码>int*ptr;ptr=&arr[0]应该是一条语句:
int*ptr=&arr[0]
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
...