帶你分分鐘玩轉C語言指標
2022-06-08 22:01:03
何為指標
指標這玩意說白了,就是用來儲存一個變數地址的東東 如圖:
(編輯器為vc2010)
#include<stdio.h> void main(){ int a,*p; a=5; p=&a; printf("a=%d,p=%p,*p=",a,p,*p); getchar(); }
所以通過剛剛的情況,我們發現通過指標我們不僅可以獲取一個變數的值還可以直接對變數的值修改
又如下面的例子:
#include<stdio.h> void main(){ int a=3; int* prt; prt=&a; printf("a的值為%dna的地址為%pnprt存放的值為%pnprt的記憶體地址為%pnprt所存的地址對應的值為%d",a,&a,prt,&prt,*prt); getchar(); }
陣列指標
說到指標只說基本的int char float有什麼意思,接下來是一個陣列指標 將陣列和指標結合起來.當然陣列本身在傳遞的時候就是以指標傳遞的. 下面是以段程式碼演示
#include<stdio.h> void main(){ int a [5]={1,2,3,4,5},*p,i; p = a; for(i=0;i<5;i++){ printf("&a[%d]=%p,a[%d]=%dn",i,p,i,p[i]); } getchar(); }
我們發現當p=a(指標指向陣列a)後,指標p可以和陣列a一樣操作,這就是指標陣列.
指標陣列
既然說到了指標陣列那麼就不得不說陣列指標,乍一看這兩個名字很像,其實差距還是很大的. int *p[] 下面還是以上面的例子為例,我們讓輸出結果一致
#include<stdio.h> void main(){ int a [5]={1,2,3,4,5},*p[5],i; for(i=0;i<5;i++){ p[i]=&a[i]; } for(i=0;i<5;i++){ printf("&a[%d]=%p,a[%d]=%dn",i,p[i],i,*p[i]); } getchar(); }
我們發現,這個東東其實就是一個儲存地址的陣列,這個記憶體地址既可以是int char 或者float 同時也可以是陣列,這個我們在說完字串陣列後再說.
字串陣列
C語言裡面沒有string類(java)也沒有str(python)只有字元,所以我們引入了字串陣列,用來儲存字串. ('a' 一個位元組 "a"兩個位元組) 這裡要注意一下的是,一個字串陣列如 char a[5]="hello",表面上看這裡只有五個字元,但是其實在他們的記憶體分佈裡面最後面結尾('o'後面)還有一個字元'