C++,数组中的地址
C++, addresses in array
关于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
...
我认为第二个数组在内存中的位置比第一个数组早。
事实并非如此。这很正常。
根据防御顺序,第一个必须是第一阵列的地址,而不是第二阵列的地址。
我不知道你从哪里听说块作用域中对象的地址根据定义顺序递增。通常,由于堆栈的工作性质,事实恰恰相反。
不管怎样,这对你来说都不重要;你的电脑可以把物体放在任何它想放的地方。
拿起一本关于计算机体系结构的书了解更多信息。
相关文章:
- 将数组的地址分配给变量并删除
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 从 C++ 中的函数返回数组地址问题
- C++,数组有多少个地址?
- 打印字符数组地址的正确方法
- 给定特定内存地址的数组的动态内存分配
- 当我使用需要计算数组单元格地址的模板时,奇怪的C++行为
- 为什么存储在数组中的地址值与其自己的地址相同,它应该指向某个不同的地址(&arr[0])?
- 我编写了一个程序来显示数组的内容,但它显示的是它的地址
- 在 C++ 中交叉动态分配的二维数组时的侵入性值/地址
- 返回数组中值的指针地址
- 创建一个函数来转换数组元素的类型并返回数组的地址
- 在分配指向数组内存地址的指针时,为什么不必使用地址运算符?
- C++指针分配字符数组的地址
- 以 C/C++ 为单位的数组中最小值的地址
- 为什么 C++ 中的字符数组返回其项目而不是地址?
- 字符数组地址和整数数组地址
- 为什么这段代码给出错误......'a'是指针到字符指针,应该存储's'的地址,因为s是指向数组的第一个元素的指针
- 直接从指针/地址访问数组的元素
- 地址数组,带有枚举的返回值