C語言指標記憶體

2021-10-09 12:50:12 字數 1100 閱讀 7671

指標的大小為4和8,系統平台對應32位和64位系統;

指標是乙個間接的引用,定義乙個變數指標名,指向乙個資料型別的空間位址,指標名內儲存的是指向資料型別的空間位址,指向資料型別的空間內儲存的是資料(資料從低位到高位儲存,高位補零),指標指向資料空間位址的首位址,指標和資料空間位址相對應可以自增自減操作,陣列名是位址常量不可以被賦值被帶有***的運算++ – += -=;

如:int a=; int* p=a; // 陣列首位址即為空間的首位址就是乙個引用。a==&a[0]

p=(p+0)=p[0]=a[0]=*(a+0)

萬能指標:

void* p=null; //定義空萬能指標

int num=5;

p=(void*)# //取位址num給空指標p

((int)p)=100;//賦值給指標值以更改變數num,強轉變換無型別為num的型別int

printf("「num=%d\n」,num);

二級指標: 二級指標必須先申請外層空間位址再申請記憶體,釋放必須先釋放內層空間再釋放外層,外層空間指標置為0;

malloc外層+內層,free內層+外層,指標=nupp;

指標運算:

指標不能進行*/%運算無意義的錯誤;

加減法:

普通指標+1相當於向右增加乙個資料型別的空間位址,陣列指標+1相當於向右增加乙個陣列空間內資料

類 型空間位址;(&)取資料型別+1相當於增加了乙個資料型別的空間位址;

普通指標+指標無意義;

指標-指標:偏移的元素個數;

指標比較:

位址的比較可以得到元素儲存的先後順序;

程序記憶體結構:

核心空間:系統核心使用

stack(棧區):系統自動管理,自動分配,自動釋放,比較小,向下增長;

標準庫檔案載入區:

heap(堆區):空間足夠大,向上增長

資料段區:

.bss段:初始化為0,未初始化的全域性變數和靜態變數,程式載入執行前會將段全部賦值為0;

.data段:初始化為非0的全域性變數和靜態變數儲存區域;

.rodata:唯讀資料段,常量;

.text區:二進位制**存放區域;

C語言記憶體(野指標 )

1.堆 在鍊錶中找接近4位元組的空間,發現 5位元組接近 4位元組,將 5位元組給程式。2.靜態儲存區 編譯時就存在 儲存全域性變數和靜態區域性變數 3.野指標 1 區域性指標變數沒有初始化 struct student char name int number int main struct st...

C語言 const static 指標 記憶體

函式指標 記憶體申請與釋放 陣列指標與指標陣列 列舉型別 int const num 100 intconst static num2 200 num 10 此句話error int a 10 int b 11 int c 12 靜態指標 intconst pa a pa是乙個常量,指向位址的值不能...

C語言指標 字串 記憶體

char p hello world 稱為a定義方式 char p hello world 稱為b定義方式 兩個p的區別 分兩種情況 1 這個p是全域性變數 通俗點就是在函式外面定義的 那麼這兩種方式,產生的效果有點相同的地方 a 使用a定義方式,只分配了 sizeof p sizeof hello...