SRN*_*SRN 4 c++ implementation pointers casting addressing
我对指向变量地址的指针很困惑

它指向最后两个字节这是如何工作的
#include <iostream>
using namespace std;
int main()
{
int i = 1;
short *j = (short*)&i;
cout << *j << endl;
}
Run Code Online (Sandbox Code Playgroud)
.
Jer*_*fin 11
指针通常保存引用项的开头的地址.
从事物的声音来看,你显然正在使用一个小端系统[编辑:这并不奇怪 - 例如,当前(英特尔)Mac和所有Windows机器都是小端],这意味着最不重要的字节您的4字节int 首先在内存中而不是在内存中:
0000001 00000000 00000000 00000000
当你使用short指针查看前两个字节时,你得到:
0000001 00000000
这正是它期望看到值1表示为两个字节的数字,所以这就是你得到的.
正如名称"little-endian"所暗示的那样,还有big-endian系统,其数据将按照您上面的说明进行布局.在这样的机器上,你可能会得到你期望的结果.为了完成,还有一些系统使用相当奇怪的安排,可能运行像byte1 byte0 byte3 byte2.