當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 學(xué)習(xí)筆記 > c語言數(shù)組和指針詳解,學(xué)霸隨堂筆記
C語言數(shù)組和指針很多人都不能學(xué)的很懂,在這里看看學(xué)霸總結(jié)的筆記,可以幫助你學(xué)習(xí)。
1. 指針是什么
1》 內(nèi)存地址編號:
0x00 00 00 00 ----0xff ff ff ff
2》 存儲(chǔ)內(nèi)存地址編號
C提供了指針這個(gè)基本數(shù)據(jù)類型來存儲(chǔ)地址編號,占4字節(jié)
3》 數(shù)據(jù)結(jié)構(gòu)的意義
操作內(nèi)存的字節(jié)
2. 指針和指針變量的意義
希望通過指針變量去控制內(nèi)存空間
3. 怎么用
定義:
內(nèi)存分區(qū):
靜態(tài)常量區(qū):靜態(tài)變量和常量
代碼區(qū):存儲(chǔ)指令
棧:臨時(shí)變量,
堆:程序員自己使用
存儲(chǔ)類型:
數(shù)據(jù)類型修飾符
指針初始化
空指針和野指針
Const
%p ----打印地址
給指針賦值地址常量;注意類型;強(qiáng)制轉(zhuǎn)化;
Char *p =(char *)0x1245678;
內(nèi)存的分配
字節(jié)對齊;字節(jié)整數(shù)倍分配
數(shù)據(jù)的存儲(chǔ)大小端
小端存儲(chǔ):低地址存低位,高存高
大端存儲(chǔ):低地址存高位,高存底
常見的指針類型
數(shù)組傳參
要注意傳參數(shù) 數(shù)組長度
指針的理解
目的:操作連續(xù)的內(nèi)存空間,即數(shù)組;
指針數(shù)組的理解
目的:操作二維數(shù)組
數(shù)組指針 int (*p)[10] //行指針
主要操作數(shù)組
Int a[10]; P=&a; //沒有意義
Int b[5][10] P=b;
多級指針
指向指針變量的指針
目的、作用:操作指針數(shù)組
數(shù)組名的理解
類型升級的地址常量;
數(shù)組名傳參理解:傳地址,如上原因;
數(shù)組不能動(dòng)態(tài)分配內(nèi)存
靜態(tài)分配;
指針數(shù)組的動(dòng)態(tài)malloc
指針的指針
數(shù)組名的意義:
代表整個(gè)數(shù)組:地址常量:首地址:
數(shù)組名的類型:&第一個(gè)元素
數(shù)組是一個(gè)構(gòu)造的數(shù)據(jù)類型
數(shù)組的內(nèi)存存儲(chǔ)
行存儲(chǔ)
Main函數(shù)傳參
指針數(shù)組名的傳參;
Char * p [3];
P[1] 字符串的首地址
P[1][3] p[1]指向字符串的第3個(gè)元素
Malloc函數(shù)
在堆上分配一個(gè)size大小的內(nèi)存空間
成功返回內(nèi)存空間的首地址;失敗NULL
用完之后必須用free(void*)釋放內(nèi)存空間;
注意保護(hù)malloc的返回地址;free釋放;必須是malloc釋放;
指針p的類型
1 決定了*p一次操作的字節(jié)數(shù)
2 決定了p+1指針移動(dòng)的字節(jié)數(shù)
訪問越界問題;
Printf函數(shù)的參數(shù)從右向左傳、
指針作為函數(shù)參數(shù)的目的
目的:
1. 節(jié)省函數(shù)參數(shù)的分配內(nèi)存空間
2. 為了方便更改指針指向的內(nèi)容
指針作為函數(shù)返回值的目的:
目的:
1. 函數(shù)體外需要處理地址
Void * p
Free(p); p編程野指針,靜止對野指針進(jìn)行取值操作。
A和&a的區(qū)別
指針的經(jīng)典:
1. 改變指針的指向
2. 更改指針的一次操作的范圍(字節(jié)數(shù))
(*ptr)[1]