過去也看過一遍,不過當時沒怎麼詳細理解,在此閱讀一遍查漏補缺,將基礎的回味一下。記錄下點滴。 1、變量初始化: 定義變量時,應該給變量賦初始值,除非確定將變量用於其他意圖之前會覆蓋這個初值。如果不能保證讀取變量之前重置變量,就應該初始化變量。變量的初始化如下: [cpp] int val1 = 0; //初始化 int val2; //未初始化 2、編譯器的部分功能: 查錯 語法錯誤 類型錯誤 聲明錯誤 3、從鍵盤輸入文件結束符 OS使用不同的值作為文件結束符。Windows系統下通過輸入Ctl+z來輸入文件結束符,Unix中通常是Ctl+d。 4、整型(integral type):表示整數、字符和布爾值的算術類型。 5、C++中,把負值賦給unsigned對象是合法的,其結果是該負數對該類型的取值個數求模後的值,如果把-1賦給8位的unsigned char 那麼結果就是255。 6、字面值常量(literal cinstant) 整形字面值:可以用3鐘進制來表示,十進制(decimal)、八進制(octal)、十六進制(hexadecimal)。以0開頭的是八進制,以0x或0X開頭的是十六進制。還可以在其後加後綴,能強制將字面值常量轉化如:L或者l代表常量long,U或者u代表unsigned類型。如:128u /*unsigned*/ 8lu/*unsigned long*/ 浮點字面值:通常用十進制或者科學計數法表示,科學技術用E或者e表示。其後加F或者f表示單精度,L或者l表示擴展精度。 如:3.1232F 3.232323E0f 布爾值和字符字面值: 非打印字符轉移序列 7、變量 1.什麼是變量:變量提供了程序可以操作的有名字的存儲區。C++中的每一個變量都有特定的類型,該類型決定了變量的內存大小和布局、能夠存儲與該內存中的值的取值范圍以及可運用在該變量上的操作集。 2.C++關鍵字 8、變量命名習慣 變量名一般用小寫字母。例如通常寫成index而不是Index或者INDEX 標識符應使用能幫組記憶的名字 包含多個詞的標識符書寫為在每個詞之間添加一個下劃線,或者每個內嵌的詞的第一個字母都大寫 9、變量的初始化 有兩種初始化方式:復制初始化(copy-initialization)和直接初始化(direct-initialization)。 int ival(1024); //direct-initialization int ival = 1024; //copy-initialization 初始化不是賦值,初始化指創建變量並給它賦初始值,而賦值是檫除對象的當前值並用新值代替。 10、變量初始化規則 1.內置類型變量的初始化 內置類型變量是否自動初始化取決於變量定義的位置。在函數體外定義的變量都初始化成0,在函數體內定義的內置類型變量不進行自動初始化。除了用作賦值操作符的做操作數,未初始化變量會引起錯誤難以發現。所以建議每個內置類型的對象都要初始化,雖不是必須但會更加容易和安全。 2.聲明與定義 變量的定義:用於為變量分配存儲空間,還可以為變量指定初始值。在一個程序中,變量有且僅有一個定義、。 聲明:用於向程序表面變量的類型和名字。定義也是聲明,當定義變量時我們聲明了他的類型和名字。可以通過使用extern關鍵字聲明變量名而不定義他。不定義的聲明包括對象名、對象類型和對象類型前的關鍵字extern“ extern int i; //declares but does not define i; int i; //declares and define i 程序中聲明可以多次,但是定義只有一次。只有當聲明也是定義時,聲明才可以初始化,因為只有定義才分配存儲空間。初始化式必須有存儲空間來初始化。 11、const限定符 1.魔數:其意義在上下文沒有體現出來。 2.const限定符將一個對象轉換成一個常量 const int bufSize = 512; //bufSize是不可以修改的 因為常量在定義後就不能被修改,所以定義時必須初始化。 3.const對象默認為文件的局部變量:在全局作用域定義非const變量時,可以在整個程序中都可以訪問。把一個非const變量定義在一個文件中,在另一個文件中使用這個變量。 [cpp] //file_1.cpp int counter; //definition //file_2.cpp extern int counter; //uses counter from file_1 ++counter; //add counter defined in file_1 在全局作用域聲明的const變量是定義在該對象的文件中的局部變量,此變量只存在那個文件中,其他文件不能訪問。通過指定const變量為extern,就可以在整個程序中訪問const對象: [cpp] //defines and initializes a const that is accessible to other files extern const int counter = 12; //definition //file_2.cpp extern const int counter; //uses counter from file_1 //uses counter defined file_1 for(int index=0; index != counter; ++index) { //// } 非const變量默認認為extern。要使const變量能夠在其他的文件中訪問,必須顯示的指定為extern。 12、引用 引用(reference)就是對象的另一個名字。在實際程序中,引用主要用作函數的形式參數。引用是一種復合類型,在變量名前添加"&"符號來定義。復合類型指其他類型定義的類型。 [cpp] int ival = 1024; int &refVal = ival; //ok int &refVal2; //error: a refernce must be initialized int &refVal3 = 10; // error:initializer must be an object 引用是別名:當引用初始化後,只要該引用存在,他就保持綁定到初始化時指定的對象。不可能將引用綁定到另一個對象。 定義多個引用:可以在一個類型定義行中定義多個引用。必須在每個引用標識符前添加"&"符號。 const引用:指向const對象的引用。可以讀取但不能修改。非const引用只能綁定到與該引用同類型的對象,const引用可以綁定到不同但相關的類型的對象或者綁定右值。 13、typedef名字:用來定義類型的同義詞。有一下三個目的: 為了隱藏特定類型的實現,強調使用類型的目的 簡化復雜的類型定義,使其更易理解 允許一種類型用於多種目的,同時使得每次使用該類型的目的明確 14、枚舉(enumeration):定義整數常量集,並將他們聚集成組。 1.定義和初始化:枚舉的定義包括關鍵字enum,其後是一個枚舉類型名。默認第一個枚舉成員賦值為0,後面的每個比前一個大1. [cpp] //input is 0, output is 1, and append is 2 enum open_modes {input,output,append}; 2.枚舉成員是常量:用來初始化枚舉成員的值必須是一個常量表達式, [cpp] //shape is 1, sphere is 2, cylinder is 3, polygon is 4 enum Forms {shape = 1, sphere, cylinder, polygon}; Forms中shape賦值為1,其他的是隱式初始化依次為2,3,4 3.每個enum都定義一種唯一類型 15、頭文件: 頭文件用於聲明而不是用於定義(頭文件包含在多個源文件中,所以不應該含有變量或者函數的定義,有三個例外:頭文件可以定義類、值在編譯時就已知的const對象和inline函數) 一些const對象定義在頭文件中 16、於處理器的簡單介紹 1.頭文件經常需要其他頭文件 2.避免多重包含:預處理器變量的名字在程序中必須是唯一的。任何與預處理器變量相匹配的名字使用都關聯到該預處理器變量。 預處理器變量有兩種狀態:已定義和未定義。可以使用下面這段代碼來預防多次包含: [cpp] #ifndef __CPLUSPLUSPRIMER_H__ #define __CPLUSPLUSPRIMER_H__ //.... #endif //__CPLUSPLUSPRIMER_H__