当前位置:编程学习 > C/C++ >>

C语言学习趣事_经典面试题系列_2

最近老感觉自己的身体一天不如一天,老是丢三落四的, 哎,岁月啊..................

      在此给还在被中国教育的童鞋们一个建议.............在学校的时候还是小玩玩游戏,小谈谈一些海阔天空的事,当你工作后,你会发现你

不但没有时间这个本钱了, 同时连身体这个本钱也没有了..........

       上次说了一些有意思的面试题, 今天我们结着看看一些关于指针和sizeof的面试题:

下面是我看到的一些面试题

5、简述
        char * const p;
        char const *p;
        const  char *p;
   之间的区别。

    首先讨论:
               char  * const p;   这里可以知道const修饰是指针变量p; 因此指针p的指向不能改变,这样的变量
          定义必须首先初始化,否则将不能编译通过。但是p指向的变量的存储内容可以改变。
               Exp:
                      char chTest1;
                      char chTest2;
                      char  * const p=&chTest1;
                      // p=&chTest2;   这个地方是错误的,不能这样赋值
                      *p=‘c’;
                      chTest1=‘b’;
    接下来讨论:
               char const *p;     这里可以知道const修饰的是*p; 因此可以知道不能通过*p指向来改变变量的值; 但是
    指针p的指向可以改变,而且可以通过原变量进行改变值。
              Exp:
                     char chTest1;
                     char chTest2;
                     char const *p=&chTest1;
                     p=&chTest2;
                     chTest=‘a’;
             这里可以知道: 1)p的指向可以改变
                           2)不能通过*p= 某个值进行赋值
                           3)指针指向的变量的值自己可以改变。
   
    最后讨论:
             const char  *p=&chTest1;  这里可以知道const修饰的是*p; 因此这个与char const *p;具有相同的效果。
           Exp:      
               char chTest1;
               char chTest2;
               const char  *p=&chTest1;
               p=&chTest2;
               chTest1=a;
               // *p=a;  这个地方错误, 不能这样修改值。

   总结:
          修饰符仅对其修饰的对象起作用,对别的变量不起作用。

6、以下代码中的两个sizeof用法有问题吗?
               void UpperCase( char str[] ) // 将 str 中的小写字母转换成大写字母
           {   
                for( size_t i=0; i <sizeof(str)/sizeof(str[0]); ++i )      
                   if( a <=str[i] && str[i] <=z )           
                             str[i] -= (a-A );
             }
            char str[] = "aBcDe";
            cout < < "str字符长度为: " < < sizeof(str)/sizeof(str[0]) < < endl;
            UpperCase( str );
            cout < < str < < endl;
   Exp:
      这个问题的考察点是sizeof的用法。那么我们应该如何看待这个问题呢?
    1、这里首先我们需要知道的是sizeof 是个运算符, 它具有运算的优先级别, 那么sizeof运算的优先级在什么地方呢?
       可以查看运算符优先级的定义: sizeof 的优先级和 *p(P为指针)、&p(变量,取地址)的优先级一样, 排在优先级的第二位。
    2、其次要明白sizeof关键字的作用
          sizeof 关键字返回的是操作数在内存中占用的字节数。
       这里要看sizeof操作符的操作对象:
       1) 类型关键字
           sizeof(int):  这个取决系统的定义, 当在32位机器上时; sizeof int == 4
                            而在16位机器上时, sizeof int == 2
       2) 变量
           int iTest;
           sizeof iTest;  这样返回的是这种变量类型在内存中所占用的空间。
           即:
                sizeof iTest == sizeof int;
       3) 字符串字面值
           sizeof "abcd";
           那么返回的是:字符串在

补充:软件开发 , C语言 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,