天天看點

c語言自學指針,C語言指針學習

人生最大的遺憾不是你錯過最好的人,而是你錯過了那個最想對你好的人。。。

----  網易雲熱評

一、指針概念

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的記憶體位址

*:取記憶體位址的值

c語言自學指針,C語言指針學習

三、野指針和空指針

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;

}

c語言自學指針,C語言指針學習

五、多級指針

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

歡迎關注公衆号:順便編點程

c語言自學指針,C語言指針學習