C++面试题(1)

1、链表反转

    我的前一篇面试题有相关的,就不写了

2、实现函数查找数组中第二大的数字(关键点——把前两个最大的数都保存起来)

//找出第二大的数
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位按照每四个位为一个整数进行求和(考点,移位运算

//位运算
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、求输出

    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

猜你喜欢

转载自blog.csdn.net/Think88666/article/details/92010267