提问者:小点点

C/C++中的指针实际上是如何存储地址的?


如果一个int以4个字节存储在内存中,每个字节具有唯一的地址,那么指向该int的指针存储这四个地址中的哪一个地址?


共3个答案

匿名用户

指向int的指针(int*)存储整数第一个字节的地址。 编译器知道int的大小,因此它只需要知道它从哪里开始。 如何解释int的字节取决于计算机的字节顺序,但这并不能改变指针只存储起始地址的事实(编译器也知道字节顺序)。

匿名用户

这4个int字节不是存储在随机位置--它们是连续的。 所以存储对象第一个字节的引用(地址)就足够了。

匿名用户

取决于建筑结构。 在大端结构(M68K,IBM z系列)上,它通常是最高有效字节的地址。 在小端结构(x86)上,它通常是最低有效字节的地址:

 A   A+1 A+2 A+3    big-endian
+–––+–––+–––+–––+
|msb|   |   |lsb|
+–––+–––+–––+–––+
 A+3 A+2 A+1 A      little-endian

我可能会省略其他奇怪的寻址方案。

但基本上,它是基础架构认为单词的“第一个”字节的任何内容。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c|c++|中|指针|实际上|存储|地址)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?