只能在定義數組時才能初始化,不能將一個數組賦值給另外一個數組,但可使用下標分別賦值給數組元素,但能夠將一個string對象賦值給另外一個string對象
編程
若是隻對數組的一部分初始化,其餘元素自動設置爲0數組
C++11可在初始化的大括號裏不包含任何東西,這將把全部元素設置爲0安全
C++11在數組列表初始化時,禁止縮窄轉換數據結構
C-風格字符串以\0結尾,不是\0結尾的字符數組不是字符串函數
任何兩個由空白(空格,製表符,換行符)分隔的字符串常量都將本身拼成一個spa
sizeof運算符指出整個數組的長度,而strlen()指出存儲在數組中的字符串的長度操作系統
cin使用空白(空格,製表符,換行符)肯定字符串的結束位置,面向單詞指針
cin的get( )函數和getline( )函數,面向行:對象
getline( )函數丟棄換行符,在讀取指定數目-1的字符或遇到換行符時中止讀取索引
get( )函數的一種變體和getline函數參數相同,但保留換行符,在再次讀取字符時要先使用無參數的get()函數讀取換行符後才能正確讀取字符,再使用clear( )函數來恢復輸入
可使用C-風格字符串來初始化string對象,使用cin來將鍵盤輸入存儲到string對象中,使用cout來顯示string對象,使用數組表示法來訪問存儲在string對象中的字符
C++將"(和)"做爲界定符,使用前綴R來標識原始字符串(不轉義),可在原始界定符間添加除空格,左括號,右括號,斜槓和控制字符外的其餘字符造成自定義字符。
C++容許在聲明結構體變量時省略關鍵字struct,並使用成員運算符 . 來訪問各個成員
C++不提倡使用外部變量,但提倡使用外部結構聲明
結構體初始化使用逗號分隔列表,並將這些值用花括號括起來
C++容許指定佔用特定位數的結構成員,該結構成員的字段類型爲整型或枚舉,接下來是冒號,冒號後面一個數字,這樣就能建立於某個硬件設備上的寄存器對應的數據結構,但位字段一般用於低級編程中。
共同體可以存儲不一樣的數據類型,但只能同時存儲其中的一種類型,當數據項使用兩種或更多種數據類型時,可節省空間, 也被經常使用於操做系統數據結構或硬件數據結構。
C++enum提供了另外一種建立符號常量的形式。在不進行強制轉換的狀況下,只能在定義枚舉時使用的枚舉賦值給這種枚舉的變量;在進行算術運算時,枚舉將自動轉爲int,其結果類型是int,必須通過強制轉換才能複製給枚舉變量
每一個枚舉都有取值範圍,經過強制轉換,能夠將取值範圍中的任何整型數值福會給枚舉變量,即便這個值不是枚舉值、枚舉取值範圍的定義是計算將枚舉最大值包含在內的2的n次方,例如最大值爲108,則其最大值的上限爲128,其最小值爲-6,則其最小值的下限爲-8,取值範圍爲-8~128
取得常規變量的地址只需使用地址運算符&便可
面向對象編程和傳統的過程性編程的區別在於,OOP強調的是運行階段進行決策。
在使用常規變量時,值是指定的量,而地址是派生量;指針則偏偏相反,指針名獲得的是地址,值是派生的量。*是間接值或解除引用運算符,將其應用於指針能夠獲得該地址處的值
在C++中,int*是一個複合類型,是指向int的指針,對於每一個指針變量名都須要使用一個*。
在聲明的語句中進行初始化,被初始化的是指針,而不是它指向的值。
在C++中建立指針時,計算機將分配用來存儲地址的內存,但不會分配用來存儲指針所指向的數據的內存。在指針應用解除引用符以前,將指針初始化爲一個肯定的適當的地址,是使用指針的金科玉律。
指針不是整型,不能簡單地將整型賦給指針,應經過強制類型轉換將數字轉換爲適當的地址
變量的值都存儲在棧的內存區域中,new從堆或自由存儲區的內存區域分配內存
使用delete釋放內存,不會刪除指針自己,不要釋放已經釋放的內存塊,也不要釋放變量聲明所得到的內存
不要建立兩個指向同一個內存塊的指針,由於這將增長錯誤的刪除同一個內存塊兩次的可能性
使用new和delete時,應遵循如下規則:
不要使用delete釋放不是new分配的內存
不要使用delete釋放同一個內存塊兩次
若是使用new[ ]爲數組分配內存,則應使用delete[ ] 來釋放
若是使用new爲一個實體分配內存,則應使用delete來釋放
對於空指針應用delete是安全的
C和C++內部都使用指針處理數組,數組和指針基本等價,區別是數組名的值是常量,不能修改,指針的值是變量,能夠修改;對數組應用sizeof運算符獲得的是數組的長度,而對指針應用則是指針的長度。
將指針變量加1時,其增長的值等於指向的類型佔用的字節數
使用數組聲明來建立數組時,將採用靜態聯編;當使用new[ ]運算符建立數組時,將採用動態聯編。
使用方括號數組表示法等同於對指針解除引用
對於數組中的字符串、用引號括起來的字符串常量、指針描述的字符串常量,其處理方式都是傳遞他們的地址
不要使用字符串常量或未被初始化的指針來接收輸入。
C++有三種管理數據內存的方式:
自動存儲->局部變量->棧
靜態存儲->在函數外聲明的變量 或 靜態存儲->使用static關鍵字的變量
動態存儲->new/delete聲明的變量->堆
vector使用new和delete來自動管理內存
在array對象初始化時,初始化元素個數的參數只能是常量。
數組和array類都存儲在棧中,vector存儲在堆中。
C++不檢查越界錯誤,中括號表示法和成員函數at( )的差異在於,at將在運行期間捕獲非法索引,而程序將默認中斷,但運行時間更長。
C++98新增的標準模板庫STL提供了模板類vector,它是動態數組的替代品;
C++11提供了模板類array,它是定長數組的替代品