贴一道Silicon Image上海研发笔试题
2009.6.9
考查指针和数据在内存中存储方式
假设机器是little endian
void main()
{
char str[] = {1,2,3,4,5,6,7,8,9,10,11,12};
int* stri = (int*)str;
unsigned char* strs = (unsigned char*)str;
printf("%d/n",*(stri+1));
printf("%d/n",*(strs+3);
}
输出结果
134678021
2055
int* stri = (int*)str; stri为整型指针,stri+2 作指针算术需要按照整形进行,故移动8个字节;
unsigned short* strs = (unsigned short*)str; strs为短整型,strs+3 移动6个字节;
little endian的机器变量低位在低地址。故将其转换为十进制即得结果。
5: 00000101
6: 00000110
7: 00000111
8: 00001000
所以最终输出的整数的二进制表示是
00001000 00000111 00000110 00000101: 134678021
根据此题我们还可以通过程序的输出知道所在的机器是little endian 还是big endian
贴一道Silicon Image上海研发笔试题
最新推荐文章于 2022-03-11 22:42:38 发布