码迷,mamicode.com
首页 > 编程语言 > 详细

C/C++ 面试题

时间:2016-05-24 17:08:10      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:c/c++ 面试题

求一个整数,二进制表示出来里面,有多少个1



#include <iostream>
using namespace std;
int func(int x)
{
        int count = 0;
        while (x)
        {
                count ++;
                x = x&(x-1);
        }
        return count;
}


int main(void)
{
        cout << func(9999) << endl;
        return 0;

}

chunli@pc0003:~$ g++ main.cpp && ./a.out 
8




关于i++,++i

#include <iostream>
using namespace std;
int main(void)
{
        int a,x;
        for(a=0,x=0; a<=1 && !x++;a++)
        {
                a++;
        }
        cout<<a<<x<<endl;
        return 0;
}
chunli@pc0003:~$ g++ main.cpp && ./a.out 
21
#include <iostream>
using namespace std;
int main(void)
{
        int a,x;
        for(a=0,x=0; a<=1 && !x++;)
        {
                a++;
        }
        cout<<a<<x<<endl;
        return 0;
}
chunli@pc0003:~$ g++ main.cpp && ./a.out 
12


解析:这两段代码的不同点就在for循环那里,前者是for(a=0,x=0; a<=1 &&!x++;a++),
后者是for(a=0,x=0;a<=1 &&!x++;)。
先说第1段代码。
第1步:初始化定义a=0,x=0。
第2步:a小于等于1,x的非为1,符合循环条件。
第3步:x++后x自增为1。
第4步:进入循环体,a++,a自增为1。
第5步:执行for(a=0,x=0;a<=1 &&!x++;a++)中的a++,a自增为2。
第6步:a现在是2,已经不符合小于等于1的条件了,所以“&&”后面的“!x++”不执行,x还是1,不执行循环体。
第7步:打印a和b,分别是2和1。


再说第2段代码。
第1步:初始化定义a=0,x=0。
第2步:a小于等于1,x的非为1,符合循环条件。
第3步:x++后x自增为1。
第4步:进入循环体,a++,a自增为1。
第5步:a现在是1,符合小于等于1的条件,所以“&&”后面的“!x++”被执行,x现在是1,x的非为0,不符合循环条件,不执行循环体,但x++依然执行,自增为2。
第6步:打印a和b,分别是1和2。
答案:第一段输出结果是21,第二段输出结果是12。

#include <stdio.h>
int main(void)
{
        int b =3;
        int arr[] = {6,7,8,9,10};
        int *p = arr;
        *(p++) += 123;
        printf("%d,%d\n",*p,*(++p));
}
chunli@pc0003:~$ gcc main.c && ./a.out 
8,8

解析:C中printf计算参数时是从右到左压栈的。
几个输出结果分别如下:
printf("%d\n ",*ptr);此时ptr应指向第一个元素6。
*(ptr++)+=123应为*ptr=*ptr+123;ptr++,此时ptr应指向第二个元素7。
printf("%d\n ",*(ptr-1));此时输出第一个元素129,注意此时是经过计算的。
printf("%d\n ",*ptr);此时输出第二个元素7,此时ptr还是指向第二个元素7。
printf("%d,%d\n",*ptr,*(++ptr));从右到左运算,第一个是(++ptr),也就是ptr++,*ptr=8,此时ptr指向第三个元素8,所以全部为8。










本文出自 “魂斗罗” 博客,请务必保留此出处http://990487026.blog.51cto.com/10133282/1782555

C/C++ 面试题

标签:c/c++ 面试题

原文地址:http://990487026.blog.51cto.com/10133282/1782555

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!