C++的指針知識可為及其重要的基礎,如果不懂得指針的用法,那看C++的源碼程序就太難了。C++的指針知識是個難點,必須克服的難點。

指針聲明:
1.每個數據類型都有指針類型
  int* i
  char* c
2.指針本來也是一種類型,指針可以對應著指針類型即二級指針變量
  int** i   即 (int*)* i【int指針類型的指針i】
3.一個*只能修飾一個指針
  int* i,p 【i為指針,p為int變量】
  要想一下聲明多個指針,則可以:int* i,*p

指針賦值:
1.指針也可以初始化,賦值或初始化的值是同類型實體(即實體變量)的地址
  int i=10;
  int* ip=&i (&表示實體的地址)
  int* ipt=&10 是不可以的,10是實體,而不認可具有空間地址(所以說是實體變量地址才有效)
2.指針直接賦實體值
  int i=10;
  int* ip=&i;
  int* ipt=10  不可以,指針初始化必須是實體地址
  *ip=20  可以,指針間訪操作
  這里的*ip為什么能直接給實體值呢?
  因為*ip是所指向實體地址的間訪操作,也就是指針指向實體的時候是可以讀寫操作的。其實這里還是賦值的地址。
3.空指針不能賦實體值
  int* ip;
  *ip=10 不可以
  這里的*ip為什么又不能給實體值了呢?
  因為這里的指針*ip沒有經過初始化,*ip沒有指向實體,為空指針,則就不能讀寫了。

指針間的操作
  當指針指向具體實體后,指針也就有了具體的實體值和具體的空間地址,這時候就可以被二級指針所操作
  int i=10;
  int* ip=&10;
  int** iip=&ip;
 
  理解了上面的指針賦值,那么其余的指針間操作就好操作了,必須理解清楚指針在各種情況下的表示。

  給指針賦值,必須是個地址,各種形式的賦值只是表現出的形式不一樣,實際指針只能指向實體的地址。指針在賦值時必須是與指針類型相同的類型實體地址。但實 際的存儲空間的實體都是以二進制數進行存儲的,那么當一個float的實體地址被一個int指針指向時,這個float實體就會被強制轉換為int實體, 那么數據就出現變動。這是危險的。我理解的是,指針不能在類型不同時進行轉換。

今天就到此了,明天還要繼續。天,有點想發狂的沖動,還有指針運算、限定、引用,函數指針。頭都要大了...