指针地址如何在c ++中工作

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.