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