C語言入門教程 第13講 動態(tài)內(nèi)存分配和鏈表

1.字符數(shù)組和字符指針 區(qū)別

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

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

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

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


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