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 
     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 
    
     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 
    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 
    #include 
    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 
    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)

你可能感兴趣的:(C++ 易错笔试题(转载))