C 内存地址分配
C++ Memory Address Allocation
很抱歉,我感到沮丧,并通过移动没有适当的详细信息发布了问题
考虑以下C 代码:
int arr[2];
arr[0] = 10;
arr[1] = 20;
// cout << &arr;
for (int i = 0; i < 2; i++)
{
cout << &arr + i << "tt"<<endl;
}
cout << sizeof (arr);
cout in for loop打印
0x7ffeefbff580 0x7ffeefbff588
比第一个元素
更远我的问题是,为什么在我的机器大小(int(上是4个字节,而不是4个字节
现在您给了我们代码,我们可以回答您的问题。
所以令人困惑的是: &arr + i
。这并不能做您认为的事情。请记住,&
优先于+
。因此,您可以使用arr
的地址并将其向前移动i
次。
指针算术的工作方式使&x + 1
通过size(x)
向前移动指针。因此,在您的情况下,什么是size(arr)
?它是8个,因为它是整数的2元素阵列(我假设INT是尺寸4(。因此,&arr + 1
实际上将指针8字节向前移动。您经历的确切事情。您不要求下一个INT,您要求下一个数组。我鼓励您四处玩,例如将arr
定义为int[3]
(尺寸为12(,并查看指针如何移动12个字节。
因此,第一个解决方案是在没有&
的情况下进行arr + i
。我们可以将指针算术应用于阵列,在这种情况下,它衰减到指针类型int*
。现在,由于int
的尺寸为4,然后arr + 1
正确到内存段4字节向前。
,但我建议的是远离指针算术并改用&arr[i]
。这是同样的事情,但是IMO的错误较小,不容易发生,不那么令人困惑,并告诉我们更多有关意图的信息。
相关文章:
- 将数组的地址分配给变量并删除
- 将地址分配给本地指针后,公共对象的变量将消失
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- 如果 const 不分配内存,为什么我可以获取 const 的地址?
- 当我在 C++ 中将派生类的指针分配给指针时,地址会更改
- LLVM 传递以在特定地址分配内存
- 是否可以仅通过将分配的指针地址存储在C++中来分析内存?
- 给定特定内存地址的数组的动态内存分配
- 堆栈分配的类类型.为什么两个 ID 实例的地址相同?
- 获取指针的地址会为其分配一个值
- 任务管理器 - C/C++ 应用程序 - 分配的地址空间与已用内存
- 如何按顺序或在指定的地址分配内存?
- 我可以直接为指针分配地址吗?如果是,如何做到这一点
- 是否可以在运行时为宏分配地址
- 为迭代器分配地址
- 如何查找继承类的分配地址
- 如何在 c++ 中为 boost::shared_ptr 分配地址
- 为指针分配地址
- 使用 'memcpy()' 为指针分配地址