任何的數據類型我們都可以把它當成個模子,然後可成各種類型的數據;任何模子都又其特定的大小。
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個章節中: