我对C++中的地址有一些有趣的问题.我有这样的代码:
#include#include 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 ...
Lightness Ra.. 6
我认为它有点奇怪,第二个数组,在内存中比第一个数组更早.
不是.这是完全正常的.
根据防御顺序,首先必须是第一阵列的地址,而不是第二阵的地址.
我不知道你在哪里听到块范围内对象的地址按照定义顺序递增.通常,由于堆栈的工作方式,反之亦然.
无论哪种方式对你来说都无关紧要; 您的计算机可以将对象放在任何需要的位置.
拿起一本关于计算机体系结构的书来获取更多信息
我认为它有点奇怪,第二个数组,在内存中比第一个数组更早.
不是.这是完全正常的.
根据防御顺序,首先必须是第一阵列的地址,而不是第二阵的地址.
我不知道你在哪里听到块范围内对象的地址按照定义顺序递增.通常,由于堆栈的工作方式,反之亦然.
无论哪种方式对你来说都无关紧要; 您的计算机可以将对象放在任何需要的位置.
拿起一本关于计算机体系结构的书来获取更多信息