Thinking in C++ 閱讀筆記(第三章)


<創建函數>

函數原型

eg. int func(in,float,long Z);   //long Z will be warned !

     int func( ) //無參數而不是任意參數

     float func (...)//可變參數列表,避免(?)

返回值

    1、每個函數都有返回值,空返回值爲void

    2、return的結果視返回值而定:

    考慮:          

 

    int func(){

      return 1;            

     }

//----------------------------------

      char func(){

      return 1;            

     }

    3、void不能使用return

 

    int func(){

      return 1;            

     }

//----------------------------------

      char func(){

      return 1;            

     }

    3、void不能使用return

 

  函數庫

 使用方法:包含頭文件

<執行控制語句>: 我最先接觸的部分:)

  //...略...//

  注意:

    1、可以隨時定義變量;

     2、goto:

         goto跳出多重循環,可讀性高;

    當然把循環寫成函數再return也行,每層循環加條件也行;

遞歸:等寫算法筆記時再寫

<運算符簡介>

運算符優先級:查表吧!

自增自減

       1、效率

            ++i //無臨時變量

          i++ //臨時變量

      2、運算順序

  consider:

  i=1;

  y=i++ //y=1,i=2

        or y=++i //y=2,i=2

  請參考:http://community.csdn.net/Expert/topic/3688/3688400.xml?temp=.260235

數據類型:內部類型、抽象類型(自定義的類)

      基本內部類型:只規定存儲臨界值,二進制及其轉換爲數位;6e-4

      bool:隱式轉換??

      說明符:specifier

     long / short 值上下限 float 4 double 8 long double 10

  修飾int可以不寫int: long a 就是 long int a

      signed / unsigned 是否使用符號位

      由此可見,long short不可以修飾char,因爲char只有一位,而signed unsigned以修飾浮點類型因爲浮點類型總含有一個符號。

指針:終於到你了! :)

* 和誰更親密?

  定義一個變量ptr來存儲地址,怎麼做到?

  int* ptr=&a

  我們實際上想要得是ptr=&a,但是沒有一個基本內部類型可以讀取&a這樣的數據,所以插入一個*來表示指針,那麼*和誰結合更密切呢?

  考慮兩種說法:

        1、int* ptr //與類型更密切

    2、int *ptr//與變量更密切

  但是他們都有自己的難處:

  1、int a,b,c可行,按照這種邏輯int* a,b,c也是可行的,但實際上我們不得不寫成

           int* a;

           int* b;

           int * c;

       2、 int *ptr=&a 這又好像在說 *ptr=&a,而這並不是我們所要的

      Eckel給我們了一個新答案:*是插入的,和前後沒有親疏關係,只是一個標誌告訴編:“ 等一等,它是一個指針。”

用途:修改外部對象;一些編程技巧

修改外部對象

        爲什麼可以修改?我們可以先看看定義並初始化一個變量時發生的事情,這樣有助於理解值傳 遞和地址傳遞 。要記住三個名詞:名稱(訪問標識),值,內存地址。值儲存在內存地址中,而名稱只是訪問該地址從而獲得值的訪問標識,可以認爲值和地址結合更緊密,是一一對應的,而訪問標識則可以有多個,我們看個例子:

e.g : int a=23; //第一個標識a 以及唯一值23

           假設&a=4198736 //唯一地址,已經轉換爲long型

           int* ptr=&a; //第二個標識*ptr

      爲什麼第二個標識不是ptr呢?因爲ptr的值是內存地址,把ptr做*運算就可以得到訪問內

存4198736的第二個標識了,它相當於第一個標識a。所以從功能上講,

           *ptr與a一樣 //兩個訪問標識

           ptr與&a一樣 //這裏複雜一些,ptr實際上是一個新的名稱,它對應另一個的值

                               //、內存地址。看完下面程序就明白了:

           void main(){
             int a;
             int*ptrA=&a;
             cout<<(long)ptrA<<endl;
             cout<<(long)&ptrA<<endl;
             }


引用簡介

      “(引用)基本思想和前面所述的指針的使用是一樣的:我們可以用引用傳遞參數地址。引用和指針的不同之處在於,帶引用的函數調用比帶指針的函數調用在語法構成上更清晰(在某種情況下,使用引用實質上的確只是語法上否成的不同)”說白了

int&a=b;

就是爲建立了別名a,而&則表示“等一等,它是一個引用”,還是用名稱,值,地址關係來看,我們可以這樣看:

int b=1;

int&a=b;

名稱:b,a   值:1   地址:&a或&b(&a=&b,這是b是a的別名的最好證據)

用引用在語法上更清晰,更符合人的思維。

更多細節,請參看:

http://dev.csdn.net/develop/article/62/62577.shtm   C++ FAQ閱讀筆記[2]--引用

選擇自 oury 的 Blog

http://dev.csdn.net/develop/article/57/57367.shtm   C++基本功:從一個左右值問題出發,侃侃C++的引用

選擇自 shooow 的 Blog

 

    int func(){

      return 1;            

     }

//----------------------------------

      char func(){

      return 1;            

     }

    3、void不能使用return

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章