【发布时间】:2017-04-06 06:33:38
【问题描述】:
我目前想知道关于 c++ 中的指针的一些事情。例如,指针返回变量的内存地址。所以如果我们说,我们想要一个整数的内存地址,我们通常有一个 32 位的长度。
当我们说一个内存单元的大小是 1 字节时,我需要 4 个单元来表示一个整数(4x8 位 = 32 位)。因此,假设我有一个指针地址,例如:0x613c20 一个整数 (int a = 10;)。
当此地址指向整个内存中的 4 个单元格之一时,为什么当我将单元格增加 +1 时会得到另一个值?我仍然会得到相同的值,因为我仍在 4 个单元格之一内?
非常感谢。
编辑:
我想我在第一次发帖时不太清楚:
我不是说我把指针增加了pointer++;
我在调试器中,通过添加 +1 来操作整数的内存地址,例如:
0x1 -> 0x2。
也就是说:
int a = 10;
*int b = &a; // 0x1
*0x1 -> 10
*0x2 -> 1203104
当 Integer 大小为 4 字节长时,为什么我这里没有 10?
【问题讨论】:
-
这取决于您所说的“增加单元格”是什么意思。如果你的意思是指针,你应该查看指针增量是如何工作的。否则,您应该查看整数在内存中的确切存储方式。
-
以二进制形式考虑这些单元格。然后你会注意到,即使开始在这 4 个单元格内,当你采取后续 4 个单元格时,如果它们被填充并有随机结果,你将超出范围并获得随机值。
-
从 lisp 或 snobol4 或 c 中搜索“atom interface”。
-
这个单元概念在 C++ 中有一个名字。它被称为字节。
标签: c++ pointers memory memory-management