46 重難點(diǎn)

點(diǎn)擊藍(lán)字
關(guān)注我們
DRAGON BOAT FESTIVAL
01 基礎(chǔ)部分
標(biāo)識符的命名規(guī)則
1.只能由字母、數(shù)字、下劃線構(gòu)成
2.數(shù)字不能作為標(biāo)識符的開頭
3.關(guān)鍵字不能作為標(biāo)識符
三目表達(dá)式
表達(dá)式1?表達(dá)式2:表達(dá)式3
先計算表達(dá)式1,
若表達(dá)式1成立, 則選擇計算表達(dá)式2,并表達(dá)式2的值作為整個大表達(dá)式的值;
若表達(dá)式1不成立,則選擇計算表達(dá)式3,并將表達(dá)式3的值作為整個大表達(dá)式的值
運(yùn)算
相同數(shù)據(jù)類型的元素進(jìn)行數(shù)學(xué)運(yùn)算得到結(jié)果還保持原數(shù)據(jù)類型。
不同數(shù)據(jù)類型的元素進(jìn)行數(shù)學(xué)運(yùn)算,先要統(tǒng)一數(shù)據(jù)類型,統(tǒng)一的標(biāo)準(zhǔn)是低精度類型轉(zhuǎn)
一維數(shù)組的定義、初始化
類型符 數(shù)組名 [常量表達(dá)式]
類型符是指數(shù)組中數(shù)組元素的類型;數(shù)組名要符合標(biāo)識符命名規(guī)則;
常量表達(dá)式是指數(shù)組的長度,其值只能是整數(shù),不可以是變量,而且從1開始計數(shù)。
數(shù)組元素的引用
數(shù)組名[下標(biāo)]
引用數(shù)組元素時,[ ]中的下標(biāo)為邏輯地址下標(biāo),只能為整數(shù),可以為變量,且從0開始計數(shù)
二維數(shù)組的定義、初始化
類型符 數(shù)組名 [常量表達(dá)式][常量表達(dá)式]
二維數(shù)組可以看做是矩陣
類型符是指數(shù)組中數(shù)組元素的類型;
數(shù)組名要符合標(biāo)識符命名規(guī)則;
第一個常量表達(dá)式是指數(shù)組的行數(shù);
第二個常量表達(dá)式是指數(shù)組的列數(shù);常量表達(dá)式的值只能是整數(shù),不可以是變量,而且從1開始計數(shù)。
一維數(shù)組初始化時可以省略數(shù)組長度
二維數(shù)組初始化時可以省略行數(shù),但不能省略列數(shù)
數(shù)組元素的引用
數(shù)組名[下標(biāo)] [下標(biāo)]
引用數(shù)組元素時,[ ]中的下標(biāo)為邏輯地址下標(biāo),只能為整數(shù),可以為變量,且從0開始計數(shù)
第一個[下標(biāo)]表示行邏輯地址下標(biāo),第二個[下標(biāo)]表示列邏輯地址下標(biāo)。
02 專題:
動態(tài)內(nèi)存分配 (所有高級語言,沒有C里深刻)
傳統(tǒng)數(shù)組的缺點(diǎn):
1.數(shù)組長度必須事先指定,而且只能是常整數(shù),不能是變量
例子
int a[5]; //必須事先指定,而且只能是常整數(shù)
int len = 5;
int a[len];//error
2.傳統(tǒng)形式定義的數(shù)組,該數(shù)組的內(nèi)存程序員無法手動釋放
數(shù)組一旦定義,系統(tǒng)為數(shù)組分配的內(nèi)存空間就會一直存在,除非數(shù)組所在的函數(shù)運(yùn)行終止。
在一個函數(shù)運(yùn)行期間,系統(tǒng)為該函數(shù)中的數(shù)組分配的空間會一直存在。
直到該函數(shù)運(yùn)行完畢時,數(shù)組的空間才會被系統(tǒng)自動釋放。
3. 數(shù)組的長度一旦定義,數(shù)組長度就不能再更改。
數(shù)組的長度不能在函數(shù)運(yùn)行的過程中動態(tài)的擴(kuò)充或縮小
4. 傳統(tǒng)方式定義的數(shù)組不能跨函數(shù)使用
A函數(shù)定義的數(shù)組,只有在A函數(shù)運(yùn)行期間才可以被其他函數(shù)使用,
但A函數(shù)運(yùn)行完畢后,A函數(shù)中的數(shù)組將無法在被其他函數(shù)使用。
為什么需要動態(tài)分配內(nèi)存?
很好的解決的了傳統(tǒng)數(shù)組的4個缺陷
動態(tài)內(nèi)存分配舉例_動態(tài)數(shù)組的構(gòu)造 難點(diǎn)
1. 要使用malloc函數(shù),必須要添加malloc.h頭文件
2. malloc函數(shù)只有一個形參,并且形參是整型
3. malloc函數(shù)只能返回第一個字節(jié)的地址,并且這個地址被強(qiáng)制類型轉(zhuǎn)化成存放整型變量的地址,傳達(dá)出指向整型 變量的信息
使用動態(tài)數(shù)組的優(yōu)點(diǎn):
1.動態(tài)數(shù)組長度不需要事先給定;
2.內(nèi)存空間可以手動釋放;
3.在程序運(yùn)行中,動態(tài)內(nèi)存空間大小可以通過realloc函數(shù)手動擴(kuò)充或縮小
靜態(tài)內(nèi)存和動態(tài)內(nèi)存的比較
靜態(tài)內(nèi)存是由系統(tǒng)自動分配,有系統(tǒng)自動釋放
靜態(tài)內(nèi)存是在棧分配的
動態(tài)內(nèi)存是由程序員手動分配,手動釋放
動態(tài)內(nèi)存是在堆分配的
跨函數(shù)使用內(nèi)存的問題 難點(diǎn)
目的:跨函數(shù)使用內(nèi)存
函數(shù)內(nèi)的靜態(tài)空間,不能被其他函數(shù)調(diào)用訪問
內(nèi)存越界:程序訪問了一個不該被訪問的內(nèi)存
函數(shù)內(nèi)的靜態(tài)空間,不能被其他函數(shù)調(diào)用訪問
函數(shù)中的內(nèi)存空間,隨函數(shù)終止而被釋放。
內(nèi)存空間釋放后的內(nèi)容不屬于其他函數(shù),其他函數(shù)無權(quán)限訪問。
但釋放后的內(nèi)存空間的地址是可以被其他函數(shù)讀取的。
指針變量可以存貯任何函數(shù)中靜態(tài)內(nèi)存空間的地址,p都能存垃圾,p想存誰存誰
靜態(tài)空間是在棧里面分配的,函數(shù)終止本質(zhì)叫做出棧,所以靜態(tài)空間隨著函數(shù)終止而釋放,動態(tài)空間是在堆里面分配 的,與棧無關(guān),與函數(shù)終止無關(guān),不隨著函數(shù)終止而釋放。
可以用free()釋放
什么是枚舉
把一個事物所以可能的取值一一列舉出來
枚舉的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):代碼更安全,比較直觀
缺點(diǎn):書寫麻煩
約翰?馮?諾依曼(JohnVonNouma,1903-1957),美藉匈牙利人
計算機(jī)之父:2大貢獻(xiàn)
二進(jìn)制
計算機(jī)設(shè)備分類:運(yùn)算器 控制器 存儲器 輸入設(shè)備 輸出設(shè)備
什么是進(jìn)制
數(shù)字是本質(zhì),進(jìn)制只是不同表現(xiàn)方式
一個十六進(jìn)制位,要用4個二進(jìn)制數(shù)表示,(1)16 = (0001)2 前面補(bǔ)齊
二進(jìn)制 逢 二進(jìn)一
十進(jìn)制 逢 十進(jìn)一 dec
八進(jìn)制 逢 八進(jìn)一 oct 0數(shù)字 int i = 05;
十六進(jìn)制 逢 十六進(jìn)一 hex 0x數(shù)字 0X數(shù)字
int i = 0x5;int i = 0X5;
生活中:
七進(jìn)制 七天進(jìn)周
十二進(jìn)制 十二月進(jìn)年
二十四進(jìn)制 二十四小時進(jìn)日
六十進(jìn)制 六十分鐘進(jìn)小時
六十秒鐘進(jìn)分鐘
匯編里
1101B 二進(jìn)制
1357O 八進(jìn)制
2049D 十進(jìn)制
3FB9H 十六進(jìn)制
十進(jìn)制(D) 二進(jìn)制(B) 八進(jìn)制(O) 十六進(jìn)制(H)
0 0 0 0
1 1 1 1
2 10 2 2
3 11 3 3
4 100 4 4
5 101 5 5
6 110 6 6
7 111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 a (A)
11 1011 13 b (B)
12 1100 14 c (C)
13 1101 15 d (D)
14 1110 16 e (E)
15 1111 17 f (F)
16 10000 20 10
017 = 7 + 1*8 = 15
0x17 = 7 + 1*16 = 25
1234 = 4 + 1*10三次方 + 2*10二次方 + 3*10一次方
0x32c = c + 3*16二次方 + 2*16一次方 = 4354
最高冪數(shù)是位數(shù)-1
原碼:也叫符號絕對值
最高位0表示正 1表示負(fù),其余二進(jìn)制位是該數(shù)字的絕對值的二進(jìn)制位
在計算機(jī)中,從未被使用!
反碼
反碼運(yùn)行不便,也沒有在計算機(jī)中應(yīng)用
移碼
表示數(shù)值平移n位,n稱為移碼量
移碼主要用于浮點(diǎn)數(shù)的階碼的存儲
補(bǔ)碼 地址是內(nèi)存單元編號 0到4G-1 2的32次方-1 總線32位,32個0,1
主要解決整數(shù)的存儲 int 4字節(jié) 32位個0,1
已知十進(jìn)制求二進(jìn)制
求正整數(shù)的二進(jìn)制
除2取余,直到商為零,余數(shù)倒序排列
求負(fù)整數(shù)的二進(jìn)制
先求出與該負(fù)數(shù)相對應(yīng)的正整數(shù)的二進(jìn)制代碼,然后,將所有位取反,末尾加1,不夠位數(shù)時,左邊補(bǔ)一
-5 5 101 010 011 29個1,011
4字節(jié) int(-3) 011 100 101 補(bǔ)29個1,101
2字節(jié) short int(-3) 101 補(bǔ)13個1 101
(-100) 16進(jìn)制 64(16進(jìn)制) 0110,0100 反 1001,1011 +1 1001,1100 FFFFFF9C 8位
求零的二進(jìn)制
全是零
已知二進(jìn)制求十進(jìn)制
如果首位是0,則表明是正整數(shù),
按普通方法來求
如果首位是1,則表明是負(fù)整數(shù),
將所有位取反,末尾加1,所得數(shù)字就是該負(fù)數(shù)的絕對值
如果全是零,則對應(yīng)的十進(jìn)制數(shù)字就是零
在在VC++6.0中一個int類型變量所能存儲的數(shù)字的范圍是多少
32位系統(tǒng),32個0,1組合表示的內(nèi)存單元,8個十六進(jìn)制數(shù)組合
int類型變量所能存儲的最大正數(shù)用十六進(jìn)制表示:7FFFFFFF
int類型變量所能存儲的絕對值最大負(fù)整數(shù)用十六進(jìn)制表示:80000000
最小負(fù)數(shù)的二進(jìn)制代碼是多少 1(0-0 31個0)
最大正數(shù)的二進(jìn)制代碼是多少 0(1-1 31個1)
已知一個整數(shù)的二進(jìn)制代碼求原始的數(shù)字 按“已知二進(jìn)制求十進(jìn)制”求
不同數(shù)據(jù)類型轉(zhuǎn)化 丟失最高位.只截取2個數(shù)據(jù)類型中,所占字節(jié)小的位數(shù)的值
鏈表
C語言和數(shù)據(jù)結(jié)構(gòu)的連接 鏈表是數(shù)據(jù)結(jié)構(gòu)第一部分
03 算法:
通俗定義:解題的方法和步驟
狹義定義:對存儲數(shù)據(jù)的操作
對不同的存儲結(jié)構(gòu),要完成某一個功能所執(zhí)行的操作是不一樣的。
比如:
要輸出數(shù)組中所有的元素的操作 和
要輸出鏈表中所有的元素的操作 是不一樣的
這說明:
算法是依附于存儲結(jié)構(gòu)的
不同的存儲結(jié)構(gòu),所執(zhí)行的算法是不一樣的
廣義定義:廣義的算法也叫泛型 C++
無論數(shù)據(jù)是如何存儲的,對該數(shù)據(jù)的操作都是一樣的
分層思想,站在更高的層次看,把內(nèi)部的實現(xiàn)給屏蔽
數(shù)組和鏈表都是線性的,都是輸出一個元素后,再輸出下一個元素
數(shù)組
優(yōu)點(diǎn):存取速度快
缺點(diǎn):需要一整塊連續(xù)的空間,插入和刪除元素效率很低
鏈表
優(yōu)點(diǎn):插入刪除元素效率高
缺點(diǎn):查找某個位置的元素效率低
鏈表專業(yè)術(shù)語:
首結(jié)點(diǎn):存放第一個有效數(shù)據(jù)的結(jié)點(diǎn)
尾結(jié)點(diǎn):存放最后一個有效數(shù)據(jù)的結(jié)點(diǎn),指針域的指針為NULL,尾結(jié)點(diǎn)的標(biāo)志
頭結(jié)點(diǎn):
頭結(jié)點(diǎn)的數(shù)據(jù)類型和首結(jié)點(diǎn)的類型是一模一樣的
頭結(jié)點(diǎn)是首結(jié)點(diǎn)前面的那個節(jié)點(diǎn)
頭結(jié)點(diǎn)并不存在有效數(shù)據(jù)
設(shè)置頭結(jié)點(diǎn)的目的是為了方便對鏈表的操作
頭指針:存放頭結(jié)點(diǎn)地址的指針變量
確定一個鏈表需要一個參數(shù),頭指針

球分享

球點(diǎn)贊

球在看
