基于小端序列的内存规律

第一种情况:

int i =0x3134;

char*b = (char*)&i;

cout<<*b<<*(b++)<<endl;

看到这部分代码,您能在3s之内得到答案么。如果可以您已经是大神的级别了。就可以不用看下面的内容了;

在做面试题的时候非常容易会见到这一些问题,之前因为没有太多的关注,所以吃了一些亏。所以这次好好的复习下;


其实上面的问题很简单。



答案为:


对于我这种菜鸟来说,总会说一句让大神们很无奈的话。 why? 


首先看内存:




其实这种是对于小端序列的操作系统而言的。这个还是记住的比较好。事情总会有一些规律让我们发现。

第二种情况:

先留个秘给大家,再来看另一种情况

union 
{
int i ;
char data[2];
}a;

int  main()

{

a.data[0] = 10;
a.data[1] = 1;

cout<<i<<endl;

}

还是老规矩看到问题就知道答案的就可以跳过去了。总要的事情说三遍,还有一遍大笑

答案:

  i = 266 (0x010a)


看内存:



第三种情况:

char *temp = new char;
temp = "123";
cout<<"temp"<<*temp<<"temp+1"<<*(temp+1)<<endl;

还是老规矩看到问题就知道答案的就可以跳过去了。总要的事情说三遍大笑


答案:



看内存:



总结:

如果是字符串的话,那么字符串的起始地址为低地址,如果是数值的话,比如说是0x3134其高地址为 0x31,低地址为0x34;



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码i小学生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值