關於指標的一點心得 20150603

2021-07-03 02:15:54 字數 1048 閱讀 9187

今天,我首先想講一下,關於指標,關於c語言的一點心得。

我接觸的第一門程式語言就是c,那時候覺得指標特別難懂,關於它的用法腦子裡很亂。直到學資料結構時,徹底的弄懂了它。

指標也是乙個變數,既然是變數,那麼他在記憶體裡就會占用空間,佔記憶體裡面就會放資料,只不過他所放的資料是乙個記憶體位址罷了。

我感覺想要弄懂這個指標應該從他所佔的內從長度開始。

下面舉乙個簡單的例子:

int a; 

char c;

int * pa = &a;

char* pc = &c;

這裡pa和pc都是指標,但是它們所指向的型別不一樣,pa指向的是int,而pc指向的char。

我們知道,char在系統中就是占用1個位元組長度的,而int是佔4個位元組長度的。那麼指向他們的指標所佔的記憶體是多大呢?是不是pa大於pc呢?

答案是,不是的,他們的長度應該是一樣長的。那麼,為什麼呢?

因為他們都是用來存乙個位址的,比如在32位的系統中,他們所佔記憶體的長度就是4個位元組,因為32位系統的位址用4個位元組就可以i表示了。所以無論指向哪乙個記憶體位址,都可以放在這4個位元組中。無論指向的內容是什麼,類也好,char也罷,他們的首位址的長度就可以用4個位元組表示。因此,任何指標所佔的記憶體長度是一樣的。

我們只要記住一點指標在記憶體裡儲存的就是乙個記憶體位址,所以pa就是乙個位址,pc也是乙個位址。

既然他們是乙個位址,那麼在他們的前面加上 * (運算子名字不記得了,不好意思),就是取出相應位址中的內容。

如果賦值 a = 4 ,那麼*p 就是4。

當然上面這種是最簡單的,對於陣列,例如:

char  c[2][3];

c是乙個常指標,這裡存放的就是乙個位址,使整個二維陣列的首位址,存在下面的關係成立。

c是真個的首位址,*c就是第一行的首位址,就是c[0],其實在不考慮型別的情況下,c與c[0所得結果是一樣的。*(c+1)就是第二行的首位址,就是c[1]。

*(c+1)+2 就是 c[1]+2,就是&c[1][2];

當然*(*(c+1)+2)就是c[1][2];

通過上面的例子,對於指標應該有所理解了吧。

關於call user func的一點心得

好久沒寫部落格實在是慚愧,最近寫乙個控制器程式,程式獲取頁面提交引數為程式中乙個類的方法。比如,頁面有不同的按鈕可以讓使用者觸發 getmethod a 和 getmethod b getmethod n 控制器在得到引數之後如何呼叫類中對應的方法?就需要用到call user func 按手冊照葫...

關於CBitmap的一點心得

本人mfc初學者,本週剛學會bmp顯示,總結的一點心得 bmp顯示無非幾種情況 1 知道位圖路徑 2 位圖已經載入到資源 3 位影象素資料在記憶體中 顯示 cbitmap pbitmap 第一種情況 hbitmap hbitmap hbitmap loadimage afxgetinstanceha...

關於面試的一點心得

本篇文章並沒有什麼技術乾貨,就是記錄和分享自己面試的一點心得,希望可以對你有所啟發。一定要自信,面試官很多時候都會反問一些問題,問你確不確定,這個時候一定要說確定,哪怕錯了也沒關係,很多時候,你回答的是對的,他們也會問你。這個能看出你對問題掌握的程度,是模糊不清還是爛熟於心。簡歷上 可以把自己擅長的...