如果指针指向数组或对象,指针的值是多少?
我知道我的问题可能是非常基本的,但我想知道在内存中获取多个单元格的对象,比如数组和用户定义的对象(在内存中需要多个单元格,因此连续地址范围在内存),指针对这类对象意味着什么? 它是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?