51單片機(jī)入門教程-2020版 程序全程純手打 從零開(kāi)始入門

啊啊啊啊,這篇筆記因?yàn)锽站的bug丟失了同時(shí)被替換成我的另一篇筆記的內(nèi)容了,
啊啊啊啊啊,我記的筆記沒(méi)了,嗚嗚嗚,那么長(zhǎng)那么長(zhǎng)的筆記,我學(xué)了3個(gè)月的成果啊
1.字符數(shù)組和字符指針 區(qū)別

一個(gè)是字符串常量,一個(gè)是字符數(shù)組。
它們最根本的區(qū)別是:在內(nèi)存中的存儲(chǔ)區(qū)域不一樣,字符數(shù)組存儲(chǔ)在全局?jǐn)?shù)據(jù)區(qū)或棧區(qū),第二種形式的字符串存儲(chǔ)在常量區(qū)。全局?jǐn)?shù)據(jù)區(qū)和棧區(qū)的字符串(也包括其他數(shù)據(jù))有讀取和寫(xiě)入的權(quán)限,而常量區(qū)的字符串(也包括其他數(shù)據(jù))只有讀取權(quán)限,沒(méi)有寫(xiě)入權(quán)限。
內(nèi)存權(quán)限的不同導(dǎo)致的一個(gè)明顯結(jié)果就是,字符數(shù)組在定義后可以讀取和修改每個(gè)字符,而對(duì)于第二種形式的字符串,一旦被定義后就只能讀取不能修改,任何對(duì)它的賦值都是錯(cuò)誤的。
指針沒(méi)有開(kāi)辟新的存儲(chǔ)而是直接指向字符串常量地址(常量地址無(wú)法改變),但是數(shù)組是復(fù)制字符串內(nèi)容開(kāi)辟新存儲(chǔ)是在新存儲(chǔ)區(qū)進(jìn)行改變
字符串?dāng)?shù)組和字符串指針的使用和區(qū)別_Robben.Han的博客-CSDN博客
動(dòng)態(tài)是堆,靜態(tài)是棧
指針指向的首字符的地址,而后面的值固定在一定內(nèi)存,指針只是通過(guò)首字符找到固定在內(nèi)存的值
指針指向的地址的hi是在程序運(yùn)行時(shí)就插進(jìn)來(lái)的,他可以是內(nèi)存中任意一個(gè)值如果改了,其他數(shù)組用這個(gè)值也是改之后的值

2.動(dòng)態(tài)內(nèi)存分配
2.1malloc()
在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū)(堆)中分配一個(gè)長(zhǎng)度為size的連續(xù)空間。其參數(shù)是一個(gè)無(wú)符號(hào)整數(shù),返回值是一個(gè)系統(tǒng)所分配的,連續(xù)內(nèi)存空間的起始地址。
void *malloc(size_t size)
- void * xxx---------無(wú)類型的指針(有類型,但是暫時(shí)不確定)
- 在<malloc.h>和<stdlib.h>的頭文件里

- 用molloc申請(qǐng)的空間是動(dòng)態(tài)的,給指針,指針可以改變動(dòng)態(tài)空間的值,這個(gè)和char a[10]等價(jià),所以可以改
2.2 free()

比如可以利用main()執(zhí)行完,返回父函數(shù),因?yàn)闂?臻g滿了,溢出的數(shù)據(jù)吧main的返回地址覆蓋了,所以程序會(huì)執(zhí)行覆蓋main返回地址的溢出的數(shù)據(jù)當(dāng)指令執(zhí)行
3.鏈表


聲明變量能否在中間,這個(gè)和C標(biāo)準(zhǔn)有關(guān)系
具體看代碼:(注釋后)
"C:\Users\31677\Desktop\apps\QNAP_HybridBackupSync\C\C語(yǔ)言入門教程\課程ppt及源代碼\第13講 動(dòng)態(tài)內(nèi)存分配和鏈表 鏈表2.cpp"
需要聯(lián)系QQ:1366480672
。。。待續(xù)