學c語言就是學記憶體
1.記憶體四區
a) **區:**;
b)全域性區:全域性的常量字串『abc』,變數;
c)棧區:系統自動開闢,自動釋放。並不是很大;
d)堆區:動態開闢的記憶體,手動開闢,手動釋放。大;
野指標:不能明確指向的指標變數。**危險!**解決:指向null;
空指標:void* 轉換成其他的資料型別。動態分配記憶體。malloc new
指標變數的運算: + 、-、 ++、 – 、指標偏移,去訪問位址旁邊的一些記憶體。
指標變數的加減,以指標型別大小的寬度偏移。
兩個位址相加/相乘沒有任何意義;
——一維陣列和指標定義乙個一維陣列,陣列名是這個陣列的「首位址」;
int a[5];
a 指向 a[0],a[0] int 的元素,a的型別就是int ;
a這個位址指向a[0]int 元素,大小4個位元組;
&a這個位址是指向整個陣列 int ( * )[5]; 這是陣列指標;
雖然這兩個的值是相同的,但型別不同
訪問陣列元素:
a)下標法;
b)指標法;
注意*和++都是單目運算子,優先順序相同,結合順序(右到左) p++ 不需要加括號; 使用陣列名(指標)去訪問陣列中的每個元素是不可以用「 * a++」,只能用「(a+i)」,道理***:陣列名不能隨意改變,會報錯。
——二維陣列和指標
int a[3][4] = ;
a)二維陣列的儲存單元是一維陣列;
b)a是指向a[0]這個一維陣列,a的型別是:int()[4]; a+1 ;16b;
c)a[0]指向的a[0][0]這個元素;a[0]的型別是:int; a[0]+1; 4b;
int a[2][3][4];
a)a是三維陣列的首位址,儲存單元是二維陣列,指向二維陣列;
b)a[0]指向一維陣列;
c)a[0][0]指向整型元素;
d)a[0][0][0]
訪問二維陣列的元素
a)下表法a[m][n];
b)指標法:* (a[m]+n) 或 * (*(a+m)+n);
延伸到多維陣列
傳智的c指標
int *p = null;這裡的/*是在定義時使用的,說明p是指標變數,而不是普通變數
printf("%d\n",*p);這裡的/*的表示取p儲存的位址編號對應空間的內容
//指標變數兩種型別:自身的型別 指向的型別
//自身的型別:在指標變數定義的時候 將變數名拖黑 剩下啥型別,指標變數就是啥型別
//指向的型別:在指標變數定義的時候,將指標變數名和離他最近的乙個*一起拖黑,剩下啥型別,指標變數指向的型別就是啥型別
//指標變數指向的型別的作用:決定了指標變數所取空間內容的寬度; 決定了指標變數+1的單位跨度。
小端:倒著存,倒著取;
B站C語言 鍊錶
靜態鍊錶 includetypedef struct teacher teacher int main void 動態建立乙個鍊錶 建立乙個表頭表示整個鍊錶 建立鍊錶 建立乙個表頭表示整個鍊錶 建立結點 插入結點 刪除結點 列印遍歷鍊錶 測試 include includestruct node s...
B站的DanmakuFlameMaster的使用
1 彈幕內容解析 danmakuloade ctory.create danmakuloade ctory.tag bili xml解析 danmakuloade ctory.create danmakuloade ctory.tag acfun json檔案格式解析 2 初始化 1 彈幕view ...
B站彈幕姬
接上篇 下面開始分析彈幕資訊 當我們在完成和伺服器的握手之後,b站的彈幕伺服器就會開始不停的開始給我們推送相關房間的彈幕訊息了。老規矩前面16個位元組是這個包的相關資訊,我們先來看下這條訊息的前面16位元組在說什麼。00 00 01 38 頭部四位元組表達資料大小這可以看到是312位元組。00 10...