c 指標與cosnt指標

2022-09-18 15:42:11 字數 2340 閱讀 2899

建立乙個指標變數:

不難理解,指標變數是乙個儲存位址的變數,位址指向另一塊記憶體,可以通過指標變數中儲存的位址,對該位址的記憶體進行操作

const修飾的指標可以分為三種

1.常量指標

2.指標常量

3.const同時修飾指標和常量

我覺得背起來很麻煩,為了更好的理解,不妨換乙個思路,回到指標pointer的基本定義

我們將int * p分為的* p分成兩個部分:*p,那麼上圖就可以分為兩部分,左邊的方框(變數p)和乙個箭頭(指標*)

方框(變數p)是什麼?是一塊記憶體

用來幹什麼?

用來儲存資料;

用來儲存型別的資料?

位址

*箭頭又是什麼?箭頭更像是乙個動作,對指向的那塊記憶體進行操作

那麼int * p就可拆分了,可以理解為我們其實建立了兩個變數,其中乙個叫指標,另乙個叫變數

1.我們建立了乙個int型的指標*,(注意不是指標變數),即為上圖中的箭頭

2.我們同時建立了乙個常量p

當然我們也可以用float、char等別的型別,但是這裡的型別決定了我們的箭頭(指標)所指向的那塊位址是什麼型別的變數,我們要對什麼型別的變數進行操作

現在我們不妨認為,p是乙個大腦,*是乙個手爪,大腦告訴手爪它的目標(乙個位址),也就是要對什麼東西進行操作,手爪就會瞄準那個目標,

而手爪對物體進行操作,則就和大腦無關了,我想抓就抓,想放開就放開,同時,而對不同種類的目標操作我們則需要不同的工具

notice:

我們現在再來看const修飾的指標變數,對於const修飾的一重指標來說,我們先記住兩件事:

1.const int * p,

這裡const修飾的就是*,這意味著,你的手爪的手指被鎖死了,你的五個手指都沒有辦法動,但是大腦p則不受影響,依舊可以隨意擺放手爪,這時候大腦給手爪

*一支叉(char),手爪就知道了,爺是要去叉猹的,好,p再給手爪*乙個目標,手抓說:好,爺要去叉猹了。但是手爪一看,爺被鎖死了啊,沒辦法扔叉,手爪

只能瞄準那只猹,而且能告訴大腦那只猹的大小,因為我有目標,我就能看的見嘛(具體的變數值,也就是解引用

這時候,大腦就被鎖死了,這意味著,不論我面前有多少多少猹,我就盯死那乙隻不變了,那麼這時手爪就自由了啊,我想叉就叉,想幾次就叉幾次

那麼這時候目標不變,所以大腦p的值是不變的,手爪*就可以隨便動,對猹操作,秀它,叉一下,那目標的猹就變成了死掉的猹,兩下,就變成了有兩個洞的死掉

的猹。。。

自己想吧,都這樣了還能幹點啥,等著被猹叉吧

int a, b = 10, 20;

int * const p = &a;

*p = 20; //可以

p = &b; //8行

C 中cosnt與指標的使用

我們經常使用const來修飾資料型別,來保證資料的安全,甚至cosnt被用在函式引數處,保證資料的安全性,當指標跟const放在一起時,它又表示什麼作用呢?我們不妨寫個 看一看,首先我們給出乙個簡單的指標賦值的操作。include using namespace std int main int t...

C 指標 指標與陣列

1.一維陣列與指標 陣列指標 陣列的首位址稱為陣列指標。若定義整型陣列a 5 系統為陣列分配的位址從1000到1019,則陣列a的首位址1000為陣列a的陣列指標。c 規定,陣列的首位址可用陣列名a表示,因此,陣列a的陣列指標 a a 0 陣列指標變數 int a 5 int p a 0 則p為陣列...

c指標陣列與陣列指標與指標函式與函式指標筆記

include include typedef struct t ooxx t ooxx,pt ooxx 測試陣列指標 void test ooxx arrayp t ooxx p int num 測試指標陣列 void test ooxx parray t ooxx p,int num 測試函式指...