程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言學習趣事_經典面試題系列_2

C語言學習趣事_經典面試題系列_2

編輯:關於C語言

最近老感覺自己的身體一天不如一天,老是丟三落四的, 哎,歲月啊..................

      在此給還在被中國教育的童鞋們一個建議.............在學校的時候還是小玩玩游戲,小談談一些海闊天空的事,當你工作後,你會發現你

不但沒有時間這個本錢了, 同時連身體這個本錢也沒有了..........

       上次說了一些有意思的面試題, 今天我們結著看看一些關於指針和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";
           那麼返回的是:字符串在

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved