用指针解决的两个问题

      前段时间找工作,笔试面试做了不少的题,其中有两个用指针解决的问题,题目不难,但做法感觉挺新的,个人觉得做得不错,拿来跟大家分享,也请大家给看看其中的不足。
1。写一个函数判断某系统是大字节序还是小字节序,不可以使用库函数。
我的答案:
int endian()    //大字节序返回0,小字节序返回1
{
    int test = 1;
    int *p = &test;
    return (int)(*(char*)p);
}
解释一下:指针p指向的是test的低端地址,将此地址转换成char型在将其中的值转换成int就是test地址低8为的存储值了,如果是1,说明数据的低位存在内存的低地址中,如果是零则相反。
PS:所谓大小字节序是指数据的高低数据位在内存中的存储位置,和处理器有关。
2。写一个判断系统字长的函数,不可以使用库函数。
我的答案:
int word_length()   //返回字长,单位bit
{
   int test[2];
   return ( (char*)(&test[1]) - (char*)(&test[0]) ) * 8;
}
也解释一下吧,不同类型的指针指向的内存空间的长度是不同的,int型指针指向的刚好是一个字长,char型的是一个字节,将test[1]和test[0]地址转换成char型再想减,即可知道整型的长度,又要求返回位长度,所以乘以8。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值