C primer 讀書筆記

2021-04-20 00:59:28 字數 3858 閱讀 9805

第2

章 變數和基本型別

1、 變數直接初始化和變數

複製初始化

int  ival(1024);                         //direct-initialization

int  ival = 1024;                       //copy-initialization

「初始化不是賦值」

。2、內建型別復

制初始化和直接初始化幾乎沒有區別;但

對類型別物件來

說,有些初始化只能用直接初始化完成。

3、未初始化變數

時,系統有

時會自動初始化。內建類

型變數在函式外定

義時被系

統初始化為0

,在函式體內則不

進行初始化,建

議每個內建型別

物件都要初始化(

這是個好的

習慣)。;

類型別用建構函式

進行初始化,大部分

類型別具有默

認建構函式,可以為物件

進行隱式初始化,有些

類型別沒有默

認建構函式,每個定

義必須顯式提供初始化式,否

則根本不能定

義該型別變數。

4、 變數的宣告和定義

一次定義

多次宣告。

為變數分配記憶體儲存空

間,還可以

賦初值。在乙個程式中

變數有且

有一次定

宣告,定

義也是宣告,

還可以只宣告不定

義,即用使用

關鍵字:

extern

。extern

宣告不是定

義,沒有分配記憶體空間,事

實上,他只說明

變數定義在程式的其他地方。

如果宣告有初始化式,那

麼它可被當成定

義,即使宣告

標記為extern:

extern int ival = 3; //definition

注意:只有

extern

宣告在函式外

時才能含有初始化式。

通常把乙個

物件的定

義在首次使用之前是乙個很好的方法(個人

認為,在大型程式中這樣定

義會使程式看起來凌亂)。6、

const

限定符因

為常量定

義後就不能修改,所以定義時必

須初始化。

const std::string hi = "hello world";  //ok initialized

const int i, j = 5; //error :i is uninitialized const

const物件默

認為檔案的區域性變數。

//file_1.cc

int counter; //define

//file_2.cc

extern int counter; //use counter form file_1.cc

counter++;

//file_1.cc

extern const int bufsize = 512; //define

//file_2.cc

extern const int bufsize ; //use bufsize form file_1.cc

bufsize ++;

非const變數默

認為extern.

要使const

變數能在其他檔案中

訪問,必

須顯示指定它

為extern.

5、引用(

reference

)實際應

用中引用主要用做函式的形式引數。

不能定義引用型別的引用,但能定義其他任何型別的引用。當引用初始化後,只要該引用存在,它就保持繫結到初始化時指向的物件。不可能將引用繫結到另乙個物件上。引用僅僅是物件的另乙個名字。

引用必須用和該引用同型別的物件進行初始化。例如下:

int ival = 1024;

int &refval = ival; //ok:refval refer to ival

int &refval2; //error:a reference must be initialized

int &refval3 = 10;//error:initializer must be an object

const

引用時指向

const

物件的引用

const int ival = 1024;

const int &refval = ival;//ok:both reference and object are const

int ref2 = ival;//error:nonconst reference refer to a const object

非const

引用只能繫結到與該引用相同型別的物件

const

引用則可以繫結到不同但相關型別的物件或右值(如:

42)。

int ival =42;;

const int &r = 42;//legal

但是非const

引用就不合法。

const int &r2 = r + ival;//legal

之所以const

引用可以繫結到不同但相關型別的物件上,是因為存在型別的隱式轉換,如:

double dval = 3.14;

const int &ri = dval;

編譯器會把**改編成如下形式:

int temp = dval;

const int &ri =temp;//ri

其實繫結的是臨時變數。 7

、類型別 除了

class

關鍵字外還可以用

struct

關鍵字定義類。兩者的唯一區別在於預設訪問級別不同:

struct

成員為public,

而class

的成員為

private

,即定義在第乙個訪問標號(

private

或public

)前的成員都隱式的定義為預設級別。 8

、編寫自己的標頭檔案

因為標頭檔案包含在多個原始檔中,所以不能含有函式和變數定義。但有三個例外,標頭檔案可以定義類,值在編譯時就已經知道得

const

物件和inline

函式。這些實體可在多個原始檔中定義,只要每個原始檔中的定義是相同的。

在標頭檔案中定義是因為編譯器需要知道他們的定義來產生**。如果

const

變數不是用常量表示式初始化,那麼它就不應該在標頭檔案中定義。當我們在標頭檔案中定義

const

變數後,每個包含標頭檔案的原始檔都有了自己的

const

變數,其名稱和值都一樣。當

const

變數是用常量表示式進行初始化時,可以保證所有的變數都有相同的值。但是在實踐中,大部分編譯器在編譯時都用常量表示式來替換

const

變數的使用。所以在實踐中不會有任何儲存空間用於儲存用常量表示式進行初始化的

const

變數。

使用與處理器變數避免多重包含。

#ifndefsalesitem_h

#definesalesitem_h

//#endif

C Primer讀書筆記

前些日子開始看 c primer 順便做一些筆記,既有書上的,也有自己理解的。因為剛學c 不久,筆下難免有謬誤之處,行文更是凌亂 所幸不是用來顯配的東西,發在linuxsir只是為了方便自己閱讀記憶,以防只顧上網忘了正事。書看了不到一半,所以大約才寫了一半,慢慢補充。const要注意的問題 1 下面...

C Primer讀書筆記

前些日子開始看 c primer 順便做一些筆記,既有書上的,也有自己理解的。因為剛學c 不久,筆下難免有謬誤之處,行文更是凌亂 所幸不是用來顯配的東西,發在linuxsir只是為了方便自己閱讀記憶,以防只顧上網忘了正事。書看了不到一半,所以大約才寫了一半,慢慢補充。const要注意的問題 1 下面...

C Primer 讀書筆記

c primer 中文版 程式由兩部分構成,資料 演算法。兩者之間的關係稱為程式設計方法。過程化程式設計方法,乙個問題由一系列的演算法建立模型 三種著名的過程語言fortran c和pascal 單獨的過程,被成為函式。後來又發展出抽象資料模型的程式設計方法,現在成為基於物件的程式設計方法,通過一組...