C++面试题(1)
2019-06-14 21:49
1336 查看
1、链表反转
我的前一篇面试题有相关的,就不写了
2、实现函数查找数组中第二大的数字(关键点——把前两个最大的数都保存起来)
[code]//找出第二大的数 int search_sec(int *arr, int len) { int ret[2] = { 0,0 }; for (int i = 0; i < len; ++i) { if (arr[i] > ret[0]) { ret[1] = ret[0]; ret[0] = arr[i]; } else if (arr[i] > ret[1]) { ret[1] = arr[i]; } } return ret[1]; }
3、实现函数,将整数的前16位按照每四个位为一个整数进行求和(考点,移位运算)
[code]//位运算 int test(int a) { int temp; int count = 0; for (int i = 0; i < 4; ++i) { temp = a >> i * 4; count += temp & 0x000F; } return count; }
4、求输出
[code] union { int a; char b[2]; }aa; aa.a = 0; aa.b[0] = 10; aa.b[1] = 1; printf("%d",aa.a);
输出结果为 266
解析:联合aa在内存中占用四个字节依次为 10 , 1, 0 , 0
以int类型解释出来就是 0,0,1,10
其中1是256, 输出结果就是 256+10