C++ 易错笔试题(转载)

下面这些题目都是我之前准备笔试面试过程中积累的,大部分都是知名公司的笔试题,C++基础薄弱的很容易栽进去。我从中选了10道简单的题,C++初学者可以进来挑战下,C++大牛也可以作为娱乐玩下(比如下面的第6题)。为了便于大家思考,将题目与答案分开,不过无论题目本身如何,我觉得后面的解析过程更值得学习,因为涉及很多我们学习C++过程中必知必会的小知识点 。

 

第一部分:题目

  1. 如下函数,在32 bit系统foo(2^31-3)的值是:()

     int foo(int x)
     {
         return x&-x;
     }

    A:0 B: 1 C: 2 D: 4
     

  2. 运算符优先级 
    unsigned char i=0x80; 
    printf("0x%x\n", ~i>>3+1); 
    输出什么?

  3. 静态对象是否调用构造函数?

    复制代码

     #include <iostream>
     using namespace std;
    
     class A
     {
     public:
         A() { cout << "A's Constructor Called " << endl;  }
     };
    
     class B
     {
         static A a;
     public:
         B() { cout << "B's Constructor Called " << endl; }
     };
    
     int main()
     {
         B b;
         return 0;
     }

    复制代码

     

  4. union问题

    复制代码

     #include <stdio.h>
    
     union
     {
         int i;
         char x[2];
     }a;
     int main()
     {
         a.x[0] = 10;
         a.x[1] = 1;
         printf("%d",a.i);
         return 0;
     }

    复制代码

     

  5. 下面代码会报错吗?为什么?

    class A {
    public:
      int m;
      void print() {  cout << "A\n";  } 
    };
    A *pa = 0;
    pa->print();

     

  6. 下面代码的输出是什么?(非常考基础水平的一道题)

    复制代码

    char *c[] = {"ENTER","NEW","POINT","FIRST"};  
    char **cp[] = { c + 3 , c + 2 , c + 1 , c};  
    char ***cpp = cp;  
    int main(void)  
    {  
     printf("%s",**++cpp);  
     printf("%s",*--*++cpp+3);  
     printf("%s",*cpp[-2]+3);  
     printf("%s\n",cpp[-1][-1]+1);  
    
     return 0;  
    }

    复制代码

     

  7. 结构体

    复制代码

    #include <stdio.h>
    struct data
    {
    int a;
    unsigned short b;
    };
    int main(void)
    {
    data mData;
    mData.b = 0x0102;
    char *pData = (char *)&mData;
    printf("%d %d", sizeof(pData), (int)(*(pData + 4)));
    return 0;
    }

    复制代码

     

  8. 改变string变量的值?

    复制代码

    #include <iostream>
    #include <string>
    using namespace std;
    void chg_str(string str) {
     str = "ichgit";
    }
    int main() {
     string s = "sarrr";
     chg_str(s);
    
     printf("%s\n", s.c_str());
     cout << s << endl;
     return 0;
    }

    复制代码

     

  9. 静态变量的输出

    复制代码

    #include <stdio.h>
    int sum(int a) {
     int c = 0;
     static int b = 3; // 只执行一次
     c++;
     b += 2;
     return (a + b + c);
    }
    int main() {
     int i;
     int a = 2;
     for(i = 0; i < 5; ++i) {
         printf("%d\n", sum(a));
     }
     return 0;
    }

    复制代码

     

  10. 返回值加const修饰的必要性 
    你觉得下面两种写法有区别吗?

    int GetInt(void) 
    const int GetInt(void)

    如果是下面的呢?其中A 为用户自定义的数据类型。

    A GetA(void)
    const A GetA(void)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值