指針小程序
指針是c語言中很靈活的一個內容,固然,靈活的都是較難掌握的。不過,只要理解其實質,學習,運用指針仍是一件很輕鬆的事情的。函數
首先理解,1.什麼是指針?學習
在c語言中,指針也同Int ,double 同樣是一種數據類型,int 存放的是一個整型數字,double 存放的是一個雙精度的數字,指針存放的是地址。記得老師講過這樣一個形象的例子:指針相似於一間倉庫的門牌號。這個門牌號能體現這個房間的具體位置。spa
2.指針有什麼用?3d
由於指針存放的是地址,因此指針能直接訪問,傳遞那個地址上的數據和那個地址,這無疑對於咱們下次即將說的 函數 有很大的方便。初步瞭解指針仍是須要本身寫幾個小程序觀察一下,而後就知道了。指針
在寫程序以前,須要知道怎麼用指針。code
由於指針也是一個數據類型,因此它的用法和 int的用法差很少都是同樣的。首先,1.定義指針 ,其格式爲 數據類型(如 int ,double ,struct) + *標識符; 數據類型的意義是,你如今定義的這個指針所存放的地址是指向什麼數據類型的,例如 int *p; 它的意思就是定義一個指向整型數字的指針變量。blog
那麼,下面就寫寫小程序探索探索吧。內存
code:io
#include<stdio.h> int main() { int a; //定義整型 scanf("%d",&a); while(a--) { int *p;//定義整型的指針變量 p=&a; //將a的地址賦給指針變量p //如今p存放的就是變量a所表明的數在計算機中所存放的地址了 printf("%d--",*p);//輸出p指向的地址存放的內容 printf("%d\n",p);//輸出p的地址 } }
運行結果:
從上面的代碼中能夠很明確的看出,指正存放的是變量的地址。那麼思考一下,指針的地址又該是多少呢? 把上面程序的最後一個語句的前面加上一句 printf("%d--",&p); 運行以後能夠看出是這樣的結果。
可見指針也是須要內存單元去存放的。
上面存在的還比較陌生的符號再說一下,* 有兩種用的地方1.在定義的時候用到,表明定義了一個指針變量,(如 int *p),2.在表達式中出現,表明取內容符號,取得p存放的地址裏面存放的內容,(如 *p) 。還有 & ,它被用做取地址符,取得內容所存放的地址,(如 &p)。
給兩個數,交換這兩個數,輸出這兩個數,相信每一位讀者都會獨立的寫出此程序,可是爲了麻煩起見,可否經過對地址的操做來交換這兩個數呢?固然能。
code
#include<stdio.h> int main() { int a,b; int *p,*q,*w; //定義指針變量 scanf("%d%d",&a,&b); p=&a; //p存放變量a的地址 q=&b;//q存放變量b的地址 printf("1:%d %d\n",*p,*q); //地址的交換,與兩個數的交換方式同樣 w=p; p=q; q=w; //此時p存放變量b的地址,q存放變量a的地址 printf("2:%d %d\n",a,b); printf("3:%d %d\n",*p,*q); printf("4:%d %d\n",&a,&b); printf("5:%d %d\n",p,q); }
運行結果:
還須要提示的是,c語言中的不少東西都是能夠鑲嵌重疊的,這我曾屢次提到,並且指針也不例外 ,好比,你定義了這樣一個變量 int **q;這個變量有什麼用呢?它與int *p;有什麼關係? 前面那個q表明着定義了一個二級指針,它的做用是指向一級指針的地址,如 q=&p; 把一級指針p的地址賦給二級指針 q。同時三級,四級都是同樣的道理,只要記住指針保存的是地址,地址的內容與它所對應的數據類型有關。
指針被稱爲c語言中最難應用的部分,不過只要掌握原理,仔細想一想,一些基礎的問題仍是能很容易想明白的。