簡單學C——第六天

 

指針小程序

  

   指針是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語言中最難應用的部分,不過只要掌握原理,仔細想一想,一些基礎的問題仍是能很容易想明白的。

相關文章
相關標籤/搜索