第一种情况:
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;