1.?數(shù)據(jù)類型的用途
數(shù)據(jù)類型的本質(zhì):固定大小內(nèi)存塊的別名
b 和 &b 地址相等
b+1 (跳4字節(jié)) 和 &b+1 (跳數(shù)組長度字節(jié))
b和&b所代表的數(shù)據(jù)類型不一樣 --?b代表的數(shù)組首元素的地址 --?&b代表的是整個(gè)數(shù)組的地址
2.變量的本質(zhì):內(nèi)存標(biāo)號?
3. 內(nèi)存四區(qū) -- 堆,棧,全局區(qū)(常量區(qū)),代碼區(qū)

4. 函數(shù)調(diào)用模型:

5. 指針是一種數(shù)據(jù)類型,是指它指向的內(nèi)存空間的數(shù)據(jù)類型。
指針的步長,根據(jù)所指內(nèi)存空間類型來定。
1. 野指針:
<1> 指針變量 和 它所指向的內(nèi)存空間變量是兩個(gè)不同的概念。
<2> 釋放了指針?biāo)傅?b>內(nèi)存空間,但是指針變量本身沒有重置為NULL。
Solution:
<1> 定義指針的時(shí)候,初始化成NULL。
<2> 釋放指針?biāo)赶虻膬?nèi)存空間后,把指針重置為NULL。
2. sizeof() ?&& ?strlen()
3. buf[]直接入棧,*p1指向?qū)?yīng)常量區(qū)“xxx”,*p2指向malloc出的堆區(qū)塊。
4. 兩頭堵算法 + 兩指針字符串翻轉(zhuǎn) + 遞歸字符串翻轉(zhuǎn)
5. 指針輸入和輸出:
輸入:主調(diào)函數(shù)分配內(nèi)存,被調(diào)函數(shù)使用。
輸出:被調(diào)函數(shù)分配內(nèi)存,結(jié)果通過指針做函數(shù)參數(shù),主調(diào)函數(shù)使用。
Tip: C風(fēng)格字符串有‘\0’
6. 二級指針三種內(nèi)存模型
<1> 第一種內(nèi)存模型:--? //指針數(shù)組 ?char *p[] ?-- ?p[i] + *(p+i)?
打印 + 排序 ?- ?(交換的是地址)(指針的值)
<2> 第二種內(nèi)存模型:--? //二維數(shù)組? char p[10][30]
打印 + 排序 – (交換的是內(nèi)存塊) - strcpy
<3> 第三種內(nèi)存模型:-- ?char **p2 = (char **)malloc(sizeof(char *) *10);
i. ?打印 + 排序 - (交換的是地址)(指針的值)
ii. ?打印 + 排序 - (交換的是內(nèi)存塊) - strcpy

1. 兩指針挖字符串,輸入輸出方法 – 二級指針最復(fù)雜場景 ---- 非常重要,尤其判斷細(xì)節(jié)
2. 多維數(shù)組的本質(zhì) ?-- ?數(shù)組的指針
<1> 二維數(shù)組在內(nèi)存中是線性存儲的。
<2> Memset(c, 0, sizeof(c))
3. 定義數(shù)組類型:
<1> 數(shù)組類型 (元素類型 和 數(shù)組大小決定)
typedef ?int ?(Myarray)[10];
Myarray ?myarray;
<2> 數(shù)組指針類型
typedef ?int ?(*PMyarray)[10];
<3> 數(shù)組指針變量
i. ?Myarray ?*myarrayPointer;
ii. ?PMyarray ?*parray;
iii. ?int ?(*PMyarray)[10];
?


4. 結(jié)構(gòu)體
定義 + 初始化
5. t1.age = 10;? p->age = 10;
.是尋址操作,計(jì)算age相對于t1變量的偏移量 ?-- ?在CPU中進(jìn)行,沒有操作內(nèi)存
6. 結(jié)構(gòu)體做函數(shù)參數(shù) ?-- ?代碼
Teacher ?array[3]
Teacher ?*pArray;
7.?結(jié)構(gòu)體套一級指針?-- ?加char *name
要分配內(nèi)存,釋放內(nèi)存。每個(gè)節(jié)點(diǎn)!!!
8.?結(jié)構(gòu)體套二級指針:
嵌套分配內(nèi)存,嵌套釋放內(nèi)存。
1.淺拷貝:
結(jié)構(gòu)體套一個(gè)一級指針或二級指針,
編譯器默認(rèn)只會把指針變量的值copy,不會copy指針變量所指向的內(nèi)存空間。
2.?結(jié)構(gòu)體中的偏移量:
一旦結(jié)構(gòu)體定義了,則結(jié)構(gòu)體中的成員,內(nèi)存布局就確定了,可以通過age地址,求大結(jié)構(gòu)體的內(nèi)存地址。

3.?文件的操作 ?-- ?讀寫磁盤

1. SocketClient動態(tài)庫函數(shù) ?-- 代碼
<1> __declspec(dllexport)
<2> 將上層傳遞來的buf,緩存在socketClient的SCK_HANDLE結(jié)構(gòu)體中。
<3> memwatch實(shí)現(xiàn)思路有趣