c++復合類型

char[]
  • 數(shù)組申明必須是整形常值或const值,以及常量表達式如(8*sizeof(int))歹叮,即所有的值在編譯時都是已知的
  • 數(shù)組允許列表初始化,并且允許對數(shù)組的部分元素初始化峡捡,其他元素將被設置為零
  • 數(shù)組名是常指針
  • c++11初始化數(shù)組時可省略等號永毅,可不包含任何東西的大括號,不可縮窄
  • c++11在vector基礎上增加了array
  • c風格的字符串需要在末尾加上'\0' ,否則不能當作字符串處理
  • 字符串常量丧没,字符串字面值鹰椒,用引號括起來的字符串默認包含了空字符
  • "S"是一個地址值,常量字符串的地址值
  • sizeof包含空字符長度呕童,strlen不包含
  • cin輸入通過鍵盤輸入的空格漆际,回車,制表符來識別字符串的結尾
  • cin.getline(char[],int) 會自動清除回車夺饲,而cin.get()必須要用不帶參數(shù)的函數(shù)去清除
  • 建議使用cin.get()奸汇,因為它更精細,使數(shù)組被填滿可以被檢查出來(通過讀取下一個元素看是否是回車)
  • 空行讀取往声,get將設置失效位擂找,接下來的輸入將被阻斷。
  • 輸入的行比分配的長時浩销,geiline會設置失效位贯涎,阻斷繼續(xù)輸入
  • 輸入隊列的概念!
  • 混合cin在讀取字符串時會將回車留在輸入隊列中撼嗓,而后調用getline會從輸入隊列中直接讀取回車停止后面的輸入柬采,解決辦法:get()或get(char)
string
  • string對象必須聲明成 簡單變量而不是數(shù)組
  • "轉義雙引號
  • strlen(char[])
  • cin>>str使用istream的成員函數(shù),getline()可行是因為使用了string的友元函數(shù)
  • R標識原始字符句法:R”()“
結構
  • 結構初始化滿足列表初始化的條件
  • 結構中的位字段且警,整形和枚舉可以聲明成位字段粉捻,句法:unsigned int a :4;沒有名稱時是提供間距
union
  • 定義成可以存儲多種類型斑芜,但是每一次只能存儲一種(多種類型之間是或的關系)肩刃,聲明方式和結構一樣,但是內存中只提供最長數(shù)據(jù)類型的大小的空間
枚舉
  • 申明方式同結構enum,相當于多個const符號常值
  • 只能將定義枚舉時的符號常量賦給枚舉變量盈包,而不是一般常值沸呐,它只定義了賦值運算符
  • 枚舉量可以轉化為整形int,而反之不行(如對枚舉賦值時的轉型)
  • 定義枚舉量時呢燥,可以對枚舉項顯示的賦值崭添,前面沒有復制的默認為0,后面的則在已賦值的基礎上逐步加一 叛氨,可以賦值多種整形類型呼渣!
  • 可以對枚舉類型的變量初始化枚舉定義時范圍內的值,即枚舉自身會檢查范圍的邊界寞埠,并檢查新賦值的合法性
指針和c++基本原理

面向對象編程和傳統(tǒng)面向過程編程的區(qū)別在于屁置,OOP強調運行時決策。而后者因此更加靈活仁连。c++使用new關鍵字申請新的地址空間蓝角,并用指針來跟蹤這些內存。在這樣的新策略中饭冬,地址被視為制定的量使鹅,而值則變成派生量,指針變量用*表示間接值或者解除引用伍伤。

  • 指針在聲明時并徘,只會分配給存儲地址的內存而不會給指向數(shù)據(jù)的內存遣钳,這就意味著在使用解除引用指針之前要確保指針指向一塊確切的空間扰魂,而不是野指針。
  • 試圖將數(shù)字賦給指針變量時蕴茴,應當使用強制類型轉換劝评,使之類型匹配
  • 指針的大小通常是四個字節(jié)和八個字節(jié)
  • 指針可以被用來在運行時訪問未命名的內存,如常見的new就是用來分配這種的地址空間(動態(tài)內存 分配)倦淀,而這種運算符用于常規(guī)數(shù)據(jù)類型時蒋畜,我們也稱之為數(shù)據(jù)對象
  • 必須聲明指針指向數(shù)據(jù)的類型的原因之一是,這樣指針可以根據(jù)數(shù)據(jù)首地址和數(shù)據(jù)類型對應的偏移量來訪問數(shù)據(jù)
  • new出的空間在heap上撞叽,而常規(guī)變量在stack上姻成,而heap上的內存需要手動釋放,delete
  • 空間分配失敗或者內存被釋放愿棋,指針值會被返回null(0)科展,此時建議使用delete null 進一步釋放
  • 使用new和delete的原則:
  • 不要使用delete來釋放不是new分配的內存
  • 不要釋放同一個內存塊兩次
  • 如果使用new[]和new來分別創(chuàng)建動態(tài)內存或者動態(tài)數(shù)組則需要用delete[] 和delete來釋放
  • 對空指針使用delete是安全的
  • 數(shù)組名實際上存的也是地址,只是這個地址是固定的糠雨,訪問數(shù)組元素是要給出確定單位數(shù)量的偏移量才睹,即使用下標訪問,而指指針則是變量,而指針算術的加法是加法是以數(shù)據(jù)類型的長度為單位
  • 另外琅攘,對數(shù)組名使用取地址運算會得到的是一個以數(shù)組為類型的指針垮庐,這時候的指針加法的單位就是整個數(shù)組的長度,舉例:short (ptr)[20] = &tell坞琴,行指針的元素ptr<=>tell
  • 指針可以同過解除引用來給內存寫入新 的值
  • sizeof作用于數(shù)組名時是返回整個數(shù)組的長度哨查,所以我們可以假設數(shù)組名中包含了數(shù)組長度的信息
  • cout字符串時,通過地址逐步訪問空間剧辐,直到遇到空地址為止
  • 在cout和其他多數(shù)c++表達式中解恰,char數(shù)組名,char指針以及用引號括起來的字符串常量都被解釋為字符串第一個字符的地址
  • 一般情況下給cout指針會輸出地址浙于,而對于char*則輸出字符串
  • c++字符串字面值不能保證被唯一的存儲
  • 對于字符數(shù)組在初始化時可以用字面常量來賦值护盈,而其他情況下用strcpy()或strncpy(),注意加cstring頭文件
  • 動態(tài)結構創(chuàng)建時,應使用箭頭成員運算符而不是點成員運算符訪問成員羞酗,或者使用解除引用指針
  • 一個很好的例子是使用動態(tài)數(shù)組來創(chuàng)建一個包含多個不一致長度的字符串數(shù)組腐宋,可以使用一個自定義的輸入函數(shù)來定義最大長度的局部變量(函數(shù)結束自動釋放),然后將從cin輸入的字符串有效長度賦值給動態(tài)字符數(shù)組(使用strcpy,記得加1)檀轨,然后記得在原函數(shù)里面使用delete釋放
自動存儲胸竞,靜態(tài)存儲,動態(tài)存儲(c++11增加了線程存儲)
  • 自動存儲
    函數(shù)內部定義的常規(guī)變量(如一般的局部變量)参萄,這些存儲空間(通常在棧上卫枝,遵循先進后出LIFO的釋放方式)在函數(shù)結束時自動釋放,所以返回指針變量時讹挎,記得不能將指針定義為該類型存儲方式校赤。避免訪問不存在的內存;
  • 靜態(tài)存儲
    整個程序運行期間都存在的存儲方式筒溃,兩種方式創(chuàng)建靜態(tài)存儲變量
  • 函數(shù)外的空間中
  • static關鍵字修飾
  • 動態(tài)存儲
    關于動態(tài)存儲(一般表現(xiàn)為用new和delete搭配創(chuàng)建和釋放的空間)先介紹heap的概念马篮,區(qū)別于上面兩種方式,動態(tài)存儲可以動態(tài)控制變量的生命起始和終止怜奖,相應的堆內存的控制也更加復雜浑测,而stack更加線性。
  • 由此引出了內存泄漏的異常歪玲,這主要是因為指向動態(tài)內存的指針不存在了迁央,但是內存空間沒有被釋放,變成了無法訪問的地址(主要是因為動態(tài)內存在heap上)滥崩,這樣的內存變成了泄露空間岖圈,即被占據(jù)而無法訪問,進而導致空間被耗盡夭委,造成溢出幅狮。
  • vector是數(shù)組的替代品募强,他們使用new和delete動態(tài)管理內存
  • array(c++11中)是靜態(tài)內存分配(棧上),所以聲明時要指定長度array<type,size>, 它的方便之處在于可以整體賦值崇摄,而數(shù)組(數(shù)組名為靜態(tài)地址)不行擎值,另外安全性上,array和vector可以自動檢查邊界逐抑,如begin()和end(),at()等函數(shù)的輔助鸠儿,我想array更像是使用了指針的靜態(tài)數(shù)組。
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末厕氨,一起剝皮案震驚了整個濱河市进每,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌命斧,老刑警劉巖田晚,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異国葬,居然都是意外死亡贤徒,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門汇四,熙熙樓的掌柜王于貴愁眉苦臉地迎上來接奈,“玉大人,你說我怎么就攤上這事通孽⌒蚧拢” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵背苦,是天一觀的道長互捌。 經(jīng)常有香客問我,道長糠惫,這世上最難降的妖魔是什么疫剃? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮硼讽,結果婚禮上,老公的妹妹穿的比我還像新娘牲阁。我一直安慰自己固阁,他們只是感情好,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布城菊。 她就那樣靜靜地躺著备燃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪凌唬。 梳的紋絲不亂的頭發(fā)上并齐,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機與錄音,去河邊找鬼况褪。 笑死撕贞,一個胖子當著我的面吹牛,可吹牛的內容都是我干的测垛。 我是一名探鬼主播捏膨,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼食侮!你這毒婦竟也來了号涯?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤锯七,失蹤者是張志新(化名)和其女友劉穎链快,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體眉尸,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡久又,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了效五。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片地消。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖畏妖,靈堂內的尸體忽然破棺而出脉执,到底是詐尸還是另有隱情,我是刑警寧澤戒劫,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布半夷,位于F島的核電站,受9級特大地震影響迅细,放射性物質發(fā)生泄漏巫橄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一茵典、第九天 我趴在偏房一處隱蔽的房頂上張望湘换。 院中可真熱鬧,春花似錦统阿、人聲如沸彩倚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽帆离。三九已至,卻和暖如春结澄,著一層夾襖步出監(jiān)牢的瞬間哥谷,已是汗流浹背岸夯。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留们妥,地道東北人猜扮。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像王悍,于是被迫代替她去往敵國和親破镰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內容

  • 基于基本類型和浮點類型創(chuàng)建(C語言:派生類型) 1.數(shù)組(簡介) 1.數(shù)組聲明 ·存儲在每個元素中的值的類型 ·數(shù)...
    MelloCat閱讀 674評論 0 3
  • Tags:C++压储,《C++ Primer Plus》筆記 一鲜漩、分類## 如下圖,大概分為這些類型集惋,每種類型的聲明語...
    傻沙閱讀 1,044評論 0 0
  • 引用是變量的別名孕似,指針就是變量地址的別名。 與引用類似刮刑,指針也實現(xiàn)了對其他對象的間接訪問喉祭。然而指針與引用又有很多不...
    ColleenKuang閱讀 466評論 0 2
  • 本章主要講的各種符合類型如數(shù)組、結構體雷绢、聯(lián)合體等等泛烙,大學學過C語言,所以很多比較熟悉翘紊,所以本章還是記錄一些比較容易...
    zinclee123閱讀 1,368評論 0 0
  • 數(shù)組array 1 數(shù)組結構 數(shù)組聲明應該有以下三點:{存儲在每個元素中的值的類型蔽氨;數(shù)組名;數(shù)組中的元素個數(shù)帆疟;}即...
    溫柔的大灰熊閱讀 345評論 0 1