我有一个整数(i)占用4个字节,我假设它存储在这样的内存中,起始地址为1000,

如果我写 int*p=&i;
p现在存储起始地址,即1000.
如果我增加p它指向地址1004.
有没有办法遍历地址1000,1001,1002和1003,以便我可以使用指针分隔和打印数字1,5,2,6?请帮助..... :((新手)
我的存储假设可能是错的 任何人都可以帮我纠正一下吗?:(
编辑1
根据Mohit Jain的回答以及其他人的建议,
unsigned char *cp = reinterpret_cast<unsigned char *>(&i);
for(size_t idx = 0; idx < sizeof i; ++idx) {
cout << static_cast<int>(cp[idx]);
}
Run Code Online (Sandbox Code Playgroud)
我的答案是246 5 0 0.
我意识到我假设内存结构的方式是错误的, 那么有没有办法使用指针获取实际数字?
一个int与值1526会不正常地被存储为四个字节与值1,5,2和6.
相反,它将以二进制形式存储.假设一个小端机器,字节将具有值:0,0,5,246(如果它是大端,则将以相反的顺序获得相同的值).这些数字的原因是它可以在每个字节中存储0到255的值.因此,它存储为5*256 + 246.当像这样处理内存中的值时,使用十六进制而不是十进制通常很方便(并且非常常见),在这种情况下,您将其视为0x05F6.
获取十进制数字的常用方法涉及比指针更多的数学.例如,最低有效数字是将值除以10后的余数.