前段时间找工作,笔试面试做了不少的题,其中有两个用指针解决的问题,题目不难,但做法感觉挺新的,个人觉得做得不错,拿来跟大家分享,也请大家给看看其中的不足。
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。
用指针解决的两个问题
最新推荐文章于 2022-07-19 20:56:07 发布