歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C指針基礎

C指針基礎

日期:2017/3/1 9:36:49   编辑:Linux編程

任何的數據類型我們都可以把它當成個模子,然後可成各種類型的數據;任何模子都又其特定的大小。

int *p;

用sizeof測試下,sizeof(p) 或者sizeof(int)是4byte,於是可以這樣定義:

一個int類型的模子在內存上刻出大小為4字節的空間,然後把4個字節大小空間命名為p。同時限定這4字節連續空間只能存儲某個內存地址,即使你存入別的任何數據,都將被當做地址處理,而且這個內存地址開始的連續4字節上只能存儲某個int數據。

我們把p稱為指針變量,p裡存儲的內存地址處的內存稱為p指向的內存。

int *p = NULL and *p = NULL

第一個是初始化。初始的是什麼呢,就是將p本身的地址初始為0.

*p = NULL是將p指向的內容初始為0.

double *p = NULL;
printf("%d\n",sizeof(p)); //始終是4byte,指針變量本身的空間
int *pt = NULL;
printf("%ox\n",pt); //通過編譯器查看pt的值為ox
int i = 10;
int *pp = &i;
printf("%d\n",i);
*pp = NULL;
printf("%d",i); //最後i的值變為0

再看:

int *p;

*p = NULL;

定義了一個指針變量p,但是p本身的地址不為人知,也許就是非法的,作用後續的也可能會報錯。

改進:

int i = 20;

int *p = &i;

*p = NULL;

將數值存儲到指定的內存地址:

假設將數值0x100存儲到地址為0x12ff7c上,那麼這個地址可以這樣得來,:我可以隨意定義個變量,比如int i;然後取地址,那麼這個地址肯定是可以訪問的。

int *p = (int *)0x12ff7c;

*p = 0x100;

也可以這樣:*((int *)0x12ff7c) = 0x100;

C指針解析及指針作為參數傳遞的應用 http://www.linuxidc.com/Linux/2014-01/95395.htm

C++ 設計新思維》 下載見 http://www.linuxidc.com/Linux/2014-07/104850.htm

C++ Primer Plus 第6版 中文版 清晰有書簽PDF+源代碼 http://www.linuxidc.com/Linux/2014-05/101227.htm

讀C++ Primer 之構造函數陷阱 http://www.linuxidc.com/Linux/2011-08/40176.htm

讀C++ Primer 之智能指針 http://www.linuxidc.com/Linux/2011-08/40177.htm

讀C++ Primer 之句柄類 http://www.linuxidc.com/Linux/2011-08/40175.htm

將C語言梳理一下,分布在以下10個章節中:

  1. Linux-C成長之路(一):Linux下C編程概要 http://www.linuxidc.com/Linux/2014-05/101242.htm
  2. Linux-C成長之路(二):基本數據類型 http://www.linuxidc.com/Linux/2014-05/101242p2.htm
  3. Linux-C成長之路(三):基本IO函數操作 http://www.linuxidc.com/Linux/2014-05/101242p3.htm
  4. Linux-C成長之路(四):運算符 http://www.linuxidc.com/Linux/2014-05/101242p4.htm
  5. Linux-C成長之路(五):控制流 http://www.linuxidc.com/Linux/2014-05/101242p5.htm
  6. Linux-C成長之路(六):函數要義 http://www.linuxidc.com/Linux/2014-05/101242p6.htm
  7. Linux-C成長之路(七):數組與指針 http://www.linuxidc.com/Linux/2014-05/101242p7.htm
  8. Linux-C成長之路(八):存儲類,動態內存 http://www.linuxidc.com/Linux/2014-05/101242p8.htm
  9. Linux-C成長之路(九):復合數據類型 http://www.linuxidc.com/Linux/2014-05/101242p9.htm
  10. Linux-C成長之路(十):其他高級議題

Copyright © Linux教程網 All Rights Reserved