人生最大的遺憾不是你錯過最好的人,而是你錯過了那個最想對你好的人。。。
---- 網易雲熱評
一、指針概念
1、指針:記憶體區的每個位元組都有一個編号,這個編号就是記憶體位址,也就是我們說的指針
2、指針變量:指針變量是存放位址的變量
3、指針也是一種資料類型
int * p;p是變量,int*是資料類型
4、萬能指針:void * 可以指向任意類型指針
5、指針步長:void *步長無法确定,是以需要轉換,int *步長為4,char *步長為1
6、const:修飾指針,表示該指針是隻讀狀态,不能修改
二、執行個體應用
#include
int * p;
int a = 11;
int main() {
p = &a;
printf("a的記憶體位址:%p\n", p);
printf("a的值:%d\n", *p);
*p = 22; //相當于給a指派
printf("a的值:%d\n", *p);
system("pause");
return 0;
}
&:取a的記憶體位址
*:取記憶體位址的值
三、野指針和空指針
1、隻有定義後的變量,變量位址才是合法的位址
2、直接指定一個位址都是不合法的,這些不合法的位址就是野指針
3、操作野指針會引起各種報錯
int *p=0x1234;
4、空指針:int *p=NULL,為了防止野指針的出現
四、指針大小,32位編譯器為4,,64位編譯器為8
#include
int main() {
int a = sizeof(int *);
int b = sizeof(double*);
char* p;
int c = sizeof(p);
printf("int *的大小為:%d\n", a);
printf("double *的大小為:%d\n", b);
printf("char *的大小為:%d\n", c);
system("pause");
return 0;
}
五、多級指針
int a=1;
int *p=&a; //p存放着a位址
int **q=&p;//q存放着p的位址
int ***r=&q;//r存放着q的位址
*p=*(p+0)=p[0]
六、指針函數
int *fun(); 傳回值是指針類型,傳回的是全局變量的位址,如果傳回局部變量位址會報錯,函數執行完,局部變量會釋放
#include
int a;
int* fun()
{
return &a;
}
int main() {
int* p = NULL;
p = fun();
*p = 1;
printf("a=%d\n", *p);
system("pause");
return 0;
}
運作結果:a=1
歡迎關注公衆号:順便編點程