• 《C语言深度解剖》面试题整理


    请在40分钟内完成以下20道C语言基础题。在没有任何提示的情况下,如果能得满分,那么你可以扔掉本书了,你的水平已经大大超过了作者;如果能的80分以上,说明你的C语言基础还不错,学习本书可能会比较轻松;如果得分在50分以下,也不要气馁,努力学习就行了;如果不小心得了10分以下,你就得给自己悄悄警钟了;如果不幸得了0分,那实在是不应该,因为毕竟很多题是很简单的。
     
    C语言基础题(每题5分)。
    1. 下面的代码输出时什么?为什么?
     C++ Code 
    1
    2
    3
    4
    5
    6
     
    void foo( void)
    {
         unsigned  int a =  6;
         int b = - 20;
        (a + b >  6) ? puts( ">6") : puts( "<=6");
    }

    2. 下面的代码有什么问题?为什么?
     C++ Code 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void foo( void)
    {
         char string[ 10], str1[ 10];
         int  i;

         for(i =  0; i <  10; ++i)
        {
            str1[i] =  'a';
        }

        strcpy(string, str1);
        printf( "%s ", string);
    }

    3. 下面的代码,i和j的值分别是什么?为什么?
     C++ Code 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    static  int j;
    int k =  0;

    void fun1( void)
    {
         static  int i =  0;
        i++;
    }
    void fun2( void)
    {
        j =  0;
        j++;
    }

    int main( void)
    {
         for( int k =  0; k <  10; ++k)
        {
            fun1();
            fun2();
        }

         return  0;
    }


    4. 下面代码里,假设在32位系统下,个sizeof计算的结果分别是多少?
    int *p = NULL;

    sizeof(p) = 
    sizeof(*p) = 

    int a[100];

    sizeof(a) = 
    sizeof(a[100]) = 
    sizeof(&a) = 
    sizeof(&a[0]) = 

    int b[100];
    void fun(int b[100])
    {
        sizeof(b) = 
    }

    5. 下面代码的结果是多少?为什么?
     C++ Code 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    #include  "stdio.h"
    #include  "string.h"

    int main( void)
    {
         signed  char a[ 1000];
         int i;

         for(i =  0; i <  1000; ++i)
        {
            a[i] = -i -  1;
        }

        printf( "%d ", strlen(a));
         return  0;
    }

    6. 下面的代码里,哪些内容可被改写,哪些不可被改写?
    (1)const int *p;
    (2)int const *p;
    (3)int * const p;
    (4)const int *const p;

    7.下面的两端代码又什么区别?什么时候需要使用代码(2)?
    代码(1):
    int i = 10;
    int j = i;
    int k = i;

    代码(2):

    volatile int i = 10;
    int j = i;
    int k = i;

    8. 在32位的x86系统下,输出的值为多少?
     C++ Code 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include  "stdio.h"

    int main( void)
    {
        int a[ 5] = { 1, 2, 3, 4, 5};
        int *ptr1 = ( int*)(&a +  1);
        int *ptr2 = ( int*)(( int)a +  1);

       printf( "%x, %x ", ptr1[- 1],*ptr2);

        return  0;
    }

    9. 0x01 <<2+3的值为多少?为什么?

    10. 定义一个函数宏,求x的平方

    11. 下面的两段代码有什么区别?
    代码(1):
    struct TestStruct1
    {
        char c1;
        short s;
        char c2;
        int i;
    };
    代码(2):
    struct TestStruct2
    {
        char c1;
        char c2;
        short s;
        int i;
    };

    12. 写代码向内存0x12ff7c地址存入一个整形术0x100.

    13. 下面代码的值是多少?
     C++ Code 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include  "stdio.h"

    int main( void)
    {
        int a[ 5] = { 1, 2, 3, 4, 5};
        int *ptr = ( int*)(&a +  1);

       printf( "%d, %d ", *(a +  1),*(ptr -  1));

        return  0;
    }

    14. 假设p的值为0x10000,如下表达式的值分别为多少?
    struct Test
    {
        int     Num;
        char    * pcName;
        short    dDate;
        char    cha[2];
        short    sBa[4];
    }* p;

    p + 0x1 = 0x    ?
    (unsigned long)p + 0x1 = 0x    ?
    (unsigned int *)p + 0x1 = 0x    ?

    15. 下面代码输出的结果是多少?
     C++ Code 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #include  "stdio.h"

    int main( void)
    {
        int a[ 3][ 2] = {( 0, 1),( 2, 3),( 4, 5)};
        int *p;
       p = a[ 0];
       printf( "%d ", p[ 0]);

        return  0;
    }

    16. 下面的代码有什么问题?为什么?
     C++ Code 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    void fun( char a[ 10])
    {
         char c = a[ 3];
    }

    int main( void)
    {
         char b[ 10] =  "abcdefg";
        fun(b[ 10]);
         return  0;
    }

    17. 下面的代码有什么问题?为什么?
     C++ Code 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    #include  "stdlib.h"
    #include  "string.h"
    struct student
    {
         char *name;
         int score;
    } stu, *pstu;
    int main( void)
    {
        pstu = ( struct student *)malloc( sizeof( struct student));
        strcpy(pstu->name,  "Jimy");
        pstu->score =  99;
        free(pstu);
         return  0;
    }

    18. 下面的代码输出结果是多少?
     C++ Code 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #include  "stdio.h"
    void fun( int i)
    {
        if(i >  0)
          fun(i/ 2);
       printf( "%d ", i);
    }
    int main( void)
    {
       fun( 10);
        return  0;
    }

    19. 下面的代码有什么问题?为什么?
    char c;
    c = getchar();
    if(EOF == c)
    {
        ...
    }

    20. 请写一个C函数,若当前系统是Big_endian的,则返回0;若是Little_endian的,则返回1。

    PS:答案回复可见。 O(∩_∩)O~
  • 相关阅读:
    ACM学习
    吴翼大神
    心急的C小加(两种解法)
    万圣节派对(水题)
    poj 1163 The Triangle
    POJ 1088滑雪
    1690 开关灯
    908. 校园网
    STL之stack栈
    1163 访问艺术馆
  • 原文地址:https://www.cnblogs.com/riskyer/p/3266738.html
Copyright © 2020-2023  润新知