C 回顧

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)思路有趣

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 指針是C語言中廣泛使用的一種數(shù)據(jù)類型。 運(yùn)用指針編程是C語言最主要的風(fēng)格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu); ...
    朱森閱讀 3,615評論 3 44
  • C++對C的加強(qiáng) 0.面向過程–>函數(shù)+面向?qū)ο蟥C>類和對象 1.namespace命名空間 2.實(shí)用性 增加 -...
    錢噓噓閱讀 650評論 0 2
  • __block和__weak修飾符的區(qū)別其實(shí)是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,597評論 0 6
  • 注:這是第三遍讀《C語言深度解剖》,想想好像自從大學(xué)開始就沒讀完過幾本書,其中譚浩強(qiáng)的那本《C語言程序設(shè)計(jì)(第四版...
    HavenXie閱讀 1,915評論 1 6
  • 2017年2月6日的,PF終于跟她相戀8年的男朋友持證上崗了。他們走得太過艱辛,分分合合,在大家都不抱希望,...
    我是靜大大閱讀 730評論 0 0

友情鏈接更多精彩內(nèi)容