中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

易被遺忘的C/C++要點(diǎn)總結(jié)

2018-07-20    來(lái)源:編程學(xué)習(xí)網(wǎng)

容器云強(qiáng)勢(shì)上線(xiàn)!快速搭建集群,上萬(wàn)Linux鏡像隨意使用

C C++知識(shí)要點(diǎn)總結(jié).png

一、 數(shù)據(jù)類(lèi)型及運(yùn)算

求補(bǔ)碼

  • 原碼的基礎(chǔ)上, 符號(hào)位不變, 其余各位取反, 最后+1
  • 原碼轉(zhuǎn)補(bǔ)碼不考慮符號(hào)位
  • 補(bǔ)碼轉(zhuǎn)原碼,符號(hào)位不參與運(yùn)算
  • 取反后 + 1 == 取反前 - 1

科學(xué)計(jì)數(shù)法表示

  • 1.8 * 10^11 --> 1.8E11
  • 9.34 * 10^-3 --> 9.34E-3

相關(guān)細(xì)節(jié)

  • sizeof()是一個(gè)運(yùn)算,而非函數(shù)
  • ++運(yùn)算不能用在實(shí)數(shù)上
  • 判斷一個(gè)整數(shù)是否是2^n(2,4,6,8,16...)
    • !(x & (x - 1))
  • 三目條件運(yùn)算符代碼更優(yōu)
    • 編譯器能產(chǎn)生比if...else...更優(yōu)的代碼

運(yùn)算符優(yōu)先級(jí)、結(jié)合方向規(guī)則

  • 單目 > 雙目
  • 算術(shù) > 關(guān)系 > 位 > 邏輯 > 條件(三目)> 賦值 > 逗號(hào)
    • 算術(shù): + - * /
    • 關(guān)系: > < >= <=
    • 位: & | ^
    • 單目: ~
    • 邏輯: && ||
    • 單目: !
  • 自右向左的三種運(yùn)算符
    • 單目
    • 賦值
    • 條件

數(shù)據(jù)輸入與輸出

  • printf()語(yǔ)句從右向左計(jì)算輸出表達(dá)式的值
    i = 1; printf("%d, %d\\\\n", i++, i--); //res: 0,1 //先執(zhí)行i--,再執(zhí)行i++

常用輸出函數(shù)

  • printf()
  • putchar()
    • 輸出一個(gè)字符
    • 必須是字符型變量或常量
  • puts()
    • 輸出一個(gè)字符串
    • 必須是字符串或常量

常用輸入函數(shù)

  • scanf()
  • gets()
    • 每次讀取一個(gè)字符串
  • getche()
    • conio.h中
    • 讀取字符不用按回車(chē)
  • getchar()

    • stdio.h中
    • 完成后須按回車(chē)
  • getche() & getchar():
    每次讀取一個(gè)字符

  • scanf() & gets()區(qū)別:
    scanf不能輸入含空格字符串,gets可以

二、選擇語(yǔ)句和循環(huán)語(yǔ)句

switch:case 常量表達(dá)式

  • 常量表達(dá)式只能為整型、字符型
  • 不允許浮點(diǎn)型

三、數(shù)組

定義

  • 定義數(shù)組未賦初值
    • Turbo C會(huì)給數(shù)組置0
    • VC則取隨機(jī)值
  • 定義靜態(tài)數(shù)組,則系統(tǒng)自動(dòng)賦0

比較字符串?dāng)?shù)組中的值

  • C:     strcmp(str1,str2)
  • C++:    str1 == str2
  • JAVA:   str1.equals(str2)
    • java中,str1 == str2 比較的是地址

四、指針

指針運(yùn)算

  • 指針相減:   表示兩指針?biāo)傅刂分g的數(shù)據(jù)個(gè)數(shù)
  • 指針相加:   沒(méi)有意義,錯(cuò)誤  

數(shù)組與指針

1、一維數(shù)組首地址

int a[10], *p;
    p = &a[0];
    p = a //等價(jià),將數(shù)組首元素的首地址賦給指針p
  • 表示:

    &a[0], a:  數(shù)組首元素的首地址
    &a:      數(shù)組首地址   

  • 對(duì)比:
    a == &a[0]
      a != &a    //地址值相同,含義不同

2、二維數(shù)組首地址

int a[10][10];

地址值相同,含義不同:

a:

  • 二維數(shù)組首元素首地址
  • 代表一維數(shù)組元素的首地址

&a:

  • 數(shù)組首地址

&a[0]:

  • 二維數(shù)組首元素首地址

&a[0][0]:

  • &a[0][0] != a
  • a[0] == &a[0][0]   

3、二維數(shù)組指針

  • int (*p)[3]:

    • 指向含3個(gè)元素的二維數(shù)組的行指針
    • 數(shù)組每列有3個(gè)元素
  • int \p[3] & int \(p[3]):

    • 指針數(shù)組,每個(gè)元素均是一個(gè)指針  

指針與引用的區(qū)別

  • 非空區(qū)別
    • 引用必須總是指向某些對(duì)象
      • 不能使用指向空值的引用
      • 不存在指向空值的引用
      • 效率比使用指針高
    • 指針可以指向空值
  • 合法性區(qū)別
    • 使用引用前,無(wú)需測(cè)試其合法性
    • 使用指針總是需要判空
  • 可修改區(qū)別
    • 指針可被重新賦值,以指向另一對(duì)象
    • 引用
      • 總指向初始化時(shí)被指定的對(duì)象
      • 以后都不能改變
      • 但指定對(duì)象的內(nèi)容可以改變
  • 應(yīng)用區(qū)別
    • 指針場(chǎng)景
      • 存在不指向任何對(duì)象的情況
      • 不同的時(shí)刻指向不同對(duì)象的情況
    • 引用場(chǎng)景
      • 指向一個(gè)對(duì)象后就不會(huì)改變指向的情況

ps:聲明引用 / const常量 的同時(shí),必須初始化

函數(shù)指針

  • float(**def)[10];

    • 二級(jí)指針

    • 指向一個(gè)一維數(shù)組的指針

    • 數(shù)組元素都是float

  • double\(\gh)[10];

    • 指針gh,指向一個(gè)一維數(shù)組

    • 該數(shù)組元素的類(lèi)型均為double *

  • double(*f[10])();

    • f是一個(gè)數(shù)組,含10個(gè)元素

      • 元素都是函數(shù)指針
    • 指向的函數(shù)

      • 沒(méi)有參數(shù)

      • 返回double類(lèi)型的值

  • int \( (\b)[10] );

    • 和int \(\b)[10]一樣   
  • Long (* fun)(int)

    • 函數(shù)指針

五、類(lèi)型轉(zhuǎn)換

(int &)相關(guān)

  • float a = 1.0f;

  • (int)a實(shí)際上是以浮點(diǎn)數(shù)a為參數(shù)構(gòu)造了一個(gè)整型數(shù),該整數(shù)的值是1。

  • (int&)a則是告訴編譯器將a當(dāng)作整數(shù)看(并沒(méi)有做任何實(shí)質(zhì)上的轉(zhuǎn)換)。   

unsigned int

  • unsigned int a = 0xFFFFFFF7;

  • unsigned char i = (unsigned char)a;

    • i: 000000f7
  • char \b = (char )&a;

    • *b: fffffff7   

隱式類(lèi)型轉(zhuǎn)換

  • 算術(shù)運(yùn)算式中,低類(lèi)型能夠轉(zhuǎn)換為高類(lèi)型

  • 賦值運(yùn)算式

    • 右邊表達(dá)式的值自動(dòng)隱式轉(zhuǎn)換為左邊變量的類(lèi)型,并賦值給他
  • 函數(shù)調(diào)用中參數(shù)傳遞時(shí),系統(tǒng)隱式地將實(shí)參轉(zhuǎn)換為形參的類(lèi)型后,賦給形參

  • 函數(shù)有返回值時(shí),系統(tǒng)將隱式地將返回表達(dá)式類(lèi)型轉(zhuǎn)換為返回值類(lèi)型,賦值給調(diào)用函數(shù)

六、位運(yùn)算相關(guān)

取兩數(shù)的平均值:

(x & y) + [(x ^ y) >> 1]

另類(lèi)取兩數(shù)較大值:

  max = [(a + b) + abs(a - b)] / 2

三數(shù)取中間數(shù):

t1 = max(a, b); t2 = max(b, c); t3 = max(a, c); min( t1, min(t2, t3) )

七、函數(shù)

靜態(tài)函數(shù):   不可被其他文件調(diào)用的函數(shù)

函數(shù)重載:

  • 參數(shù)類(lèi)型不同

  • 參數(shù)個(gè)數(shù)不同

  • 對(duì)返回類(lèi)型沒(méi)有要求

八、#define & const & sizeof

#define實(shí)例

* #define SEC (60 * 60 * 24 * 365)UL
* #define MIIN(A, B) ( (A) <= (B) ? (A) : (B) )

const,#define的區(qū)別

  • const

    • 有數(shù)據(jù)類(lèi)型

    • 可進(jìn)行類(lèi)型安全檢查

    • 可對(duì)其進(jìn)行調(diào)試

  • \#define

    • 沒(méi)有數(shù)據(jù)類(lèi)型

    • 僅進(jìn)行字符替換,沒(méi)有類(lèi)型安全檢查

    • 無(wú)法調(diào)試

  • c中const

    • 被當(dāng)做一個(gè)不能被改變的普通變量   
  • error
    const bufsize = 100; char buf[bufsize];

  
字節(jié)對(duì)齊

  • 數(shù)據(jù)對(duì)齊規(guī)則

    • 結(jié)構(gòu)的首地址必須是結(jié)構(gòu)內(nèi)最寬類(lèi)型的整數(shù)倍地址

    • 結(jié)構(gòu)體的每一個(gè)成員起始地址必須是自身類(lèi)型大小的整數(shù)倍

  • 結(jié)構(gòu)體的整體大小必須可被對(duì)齊值整除

  • 結(jié)構(gòu)體的整體大小必須可被本結(jié)構(gòu)內(nèi)的最寬類(lèi)型整除   

sizeof

  • 結(jié)構(gòu)體或類(lèi)內(nèi)的靜態(tài)變量

    struct s{ int a; static int b;
      };
      s ss; sizeof(ss)

    結(jié)果:4

  • 靜態(tài)變量存放在全局?jǐn)?shù)據(jù)區(qū)

  • sizeof計(jì)算棧中分配的大小

  • 任何類(lèi)型指針大小相同:4(32位)

  • 對(duì)函數(shù)使用sizeof

  • 在編譯階段會(huì)被函數(shù)返回值的類(lèi)型取代

  • 空類(lèi)大小

    • 單繼承:1
    • 多繼承:1
    • 虛繼承:4
    • 涉及虛表(虛指針)   

內(nèi)聯(lián)函數(shù) vs. 宏

  • 內(nèi)聯(lián)
    • 相比普通函數(shù): 加快程序運(yùn)行速度
    • 直接嵌入目標(biāo)代碼
    • 要做參數(shù)類(lèi)型檢查
    • 簡(jiǎn)單的替換
    • 不做參數(shù)類(lèi)型檢查

九、 C++面向?qū)ο?/span>

1、類(lèi)和對(duì)象

  
類(lèi)對(duì)象的存儲(chǔ)空間

  • 只為每個(gè)對(duì)象的數(shù)據(jù)成員和函數(shù)地址分配內(nèi)存空間
  • 類(lèi)中所有成員函數(shù)只生成一個(gè)副本
  • 該類(lèi)每個(gè)對(duì)象執(zhí)行相同的函數(shù)成員

拷貝構(gòu)造函數(shù)

  • 功能
    • 用一個(gè)已知的對(duì)象來(lái)初始化一個(gè)被創(chuàng)建的同類(lèi)的對(duì)象
  • 特點(diǎn)
    • 函數(shù)只有一個(gè)參數(shù),并且是對(duì)某個(gè)對(duì)象的引用
    • 每個(gè)類(lèi)都必須有一個(gè)拷貝初始化構(gòu)造函數(shù)
  • 格式
    • 類(lèi)名::拷貝初始化構(gòu)造函數(shù)名(const 類(lèi)名 &引用名)

靜態(tài)成員

  • 靜態(tài)數(shù)據(jù)成員
    • 特點(diǎn)
      • 類(lèi)的所有對(duì)象共享
      • 必須初始化,且要在類(lèi)外初始化
    • 引用格式
      • 類(lèi)名::靜態(tài)數(shù)據(jù)成員名
  • 靜態(tài)成員函數(shù)
    • 特點(diǎn)
      • 類(lèi)的所有對(duì)象共享
      • 只能使用類(lèi)的靜態(tài)成員和非數(shù)據(jù)成員
    • 引用格式
      • 類(lèi)名::靜態(tài)成員函數(shù)名

類(lèi)成員指針
const成員函數(shù)

定義: 任何不修改成員數(shù)據(jù)的函數(shù)都應(yīng)聲明為const函數(shù)

原型: int GetY() const;

細(xì)節(jié):

  • const函數(shù)想修改成員變量
    • 在相應(yīng)變量定義處加上mutable
    • mutable int m_Count;

2、友元函數(shù)

  
定義

  • 需在類(lèi)體內(nèi)聲明
  • 可訪(fǎng)問(wèn)類(lèi)的私有成員
  • 不是類(lèi)的成員函數(shù)

優(yōu)點(diǎn):    提高程序運(yùn)行效率

缺點(diǎn):   破壞類(lèi)的封裝性和隱藏性

特點(diǎn):    可以是多個(gè)類(lèi)的友元

3、繼承和派生

  
公有繼承

  • 派生類(lèi)成員函數(shù)可訪(fǎng)問(wèn)基類(lèi)中的公有成員和保護(hù)成員
  • 派生類(lèi)的對(duì)象僅可訪(fǎng)問(wèn)基類(lèi)中的公有成員

派生類(lèi)

  • 構(gòu)造函數(shù)執(zhí)行順序

    • 基類(lèi)構(gòu)造函數(shù)
    • 子對(duì)象類(lèi)的構(gòu)造函數(shù)(如果有的話(huà))
    • 派生類(lèi)構(gòu)造函數(shù)   
  • 析構(gòu)函數(shù)執(zhí)行順序

    • 派生類(lèi)的析構(gòu)函數(shù)
    • 基類(lèi)的析構(gòu)函數(shù)

虛基類(lèi)


文/rh_Jameson(簡(jiǎn)書(shū)作者)
原文鏈接:http://www.jianshu.com/p/14e8c549600c

標(biāo)簽: isp 安全 代碼

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀(guān)點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:TIOBE 2016年3月編程語(yǔ)言排行榜:編程語(yǔ)言呈內(nèi)部發(fā)展趨勢(shì)

下一篇:工具 | To-Do List,你選哪一款