如果指针指向数组或对象,指针的值是多少?

我知道我的问题可能是非常基本的,但我想知道在内存中获取多个单元格的对象,比如数组和用户定义的对象(在内存中需要多个单元格,因此连续地址范围在内存),指针对这类对象意味着什么? 它是C ++中的变量,它包含这些对象在内存中的地址(逻辑上不是真的,因为这些对象在内存中占用了多个单元,因此具有连续地址的范围),或者说指向这些对象的指针仅仅是开始这些对象的地址(更合理)。

请帮我理解; 如果你不相信我对C ++指针定义的解释,请给我一个正确的解释。

在大多数C ++教程中,它指出指针只包含内存中其他变量的地址。


如果我(因为编译器)知道的int是(这个特殊的系统上),4个字节,一个指向int只需要告诉我在哪里“开始”的int是:我只需要读它和下一3个字节!

对于像数组这样的更大数据结构,情况也是如此:如果我知道数组的起始位置,我知道可以通过将一个项目的大小添加到地址来访问每个后续元素。 例如,如果我有一个从地址100开始的int a[] ,并且int是4个字节,那么

a[32] = (address of a) + (32 * size of int) = 100 + 128 = 228因此字节228至231是a [32]处的整数。

使这个稍微容易使用的是编译器为我们抽象了不同大小的数据类型。 如果我给我的整数指针加1,地址实际上会增加4! 这是因为我很少(几乎从不)想要读取半个整数:更可能是我希望依次查看一系列整数。


比方说你有一个可变的a声明和初始化一样

int a = 5;

然后你创建一个指针,并使用地址 - 运算符&将int指向a

int* pointer_to_a = &a;

pointer_to_a的实际值是a在内存中的地址。 但是编译器知道这是一个指针,所以你可以使用pointer_to_a访问的内容, a与引用操作*

*pointer_to_a = 10;
std::cout << "a = " << a << 'n';

以上将打印10 ,因为您设置pointer_to_a指向10


从这里

计算机的内存可以想象成一系列内存单元,每一个都是计算机管理的最小尺寸(一个字节)。 这些单字节存储器单元以连续的方式编号,因此,在任何存储器块内,每个单元具有与前一个加号相同的编号。

这样,每个单元可以很容易地位于存储器中,因为它具有唯一的地址,并且所有存储单元都遵循连续的模式。 例如,如果我们在寻找单元1776,我们知道它将在单元1775和1777之间正好是正好在776之后的一千个单元和正好在单元2776之前的一千个单元之间。

链接地址: http://www.djcxy.com/p/5415.html

上一篇: What is the value of a pointer if it is pointing to an array or an object?

下一篇: C++: Vector of objects vs. vector of pointers to new objects?