指針
1.指針類型是一種特殊類型
DataType *name;
DataType* name;
DataType * name;
指針與普通變量的區(qū)別:
指針: 存地址
普通變量:存值
指針只能保存與其相同類型的地址
2.初始化
int *p = NULL; //ok
NULL表示空地址
int a = 3;
int *pa = &a; //ok
int *pb;
pb = &a; //ok
int *pc;
*pc = &a; //error
3.地址的訪問
*:間接訪問運(yùn)算符欺税;
*p
空地址不能訪問里面的值
4.可以把指針變量賦值給同類型指針
5.不同類型的指針大小
64位機(jī):8
32位機(jī):4
6.指針的類型和指針?biāo)赶虻念愋? int *pa;
double *pb;
指針的類型:去掉變量名之后的部分
指針?biāo)赶虻念愋停喝サ糁羔樧兞棵推淝懊娴?
7.指針與數(shù)組
數(shù)組名是一個(gè)地址虱饿,
數(shù)組元素的訪問:
int arr[5] = {1,2,3,4,5};
int *p = arr;
形式:
arr[0]; arr[3];
*(arr); *(arr+3);
*(pa); *(pa+3);
p[0]; p[3];
8.野指針
沒有初始化,或其指向的內(nèi)存被釋放,而指針沒有被置空酝润;
危害:
造成系統(tǒng)資源的浪費(fèi)吊说,容易造成未知的致命錯(cuò)誤卧秘。
9.指針的地址運(yùn)算
指針的自增:指針向高地址方向移動(dòng)
自減:指針向低地址方向移動(dòng)
移動(dòng)的字節(jié)數(shù)是指針?biāo)赶虻念愋偷拇笮? 指針相加沒有意義,指針相減表示兩指針的距離
指針加減一個(gè)常量葛超,表示地址往高字節(jié)或低字節(jié)方向移動(dòng)
常量值*sizeof(對(duì)應(yīng)數(shù)據(jù)類型)個(gè)字節(jié)
10.概念區(qū)分
int buf[3]; //數(shù)組,大小為3延塑,存放3個(gè)int型變量
int *pb; //指針绣张,其類型為int*型
int *arr[3]; //指針數(shù)組
int (*pa)[3]; //數(shù)組指針,又稱行指針
二級(jí)指針
DataType **PointorName;
int a = 10;
int *q = &a;
int **p = &*q;
**p == *q == a;
定義一個(gè)指針关带,或?qū)Φ刂愤M(jìn)行操作時(shí)侥涵,一定要確定指針的指向
總結(jié):
指針就是存儲(chǔ)地址的單元;指針基本上跟數(shù)組名等同宋雏,理解起來有點(diǎn)難度芜飘,注意思維的轉(zhuǎn)變,暫時(shí)我理解起來還沒有什么問題磨总,主要是對(duì)指針還不能熟練的運(yùn)用嗦明,指針是C語言的靈魂,以后要注意對(duì)指針的鍛煉蚪燕。