記憶體區的每乙個位元組都有乙個編號,就是「位址」
如果在程式中定義了乙個變數,在對程式進行編譯或者執行時,系統會給這個變數分配記憶體單元,並確定他的記憶體位址(編號)
指標的實質就是記憶體位址,指標就是位址,位址就是指標
通常我們敘述時會把指標變數簡稱為指標,實際他們的含義不一樣
//1指標也是一種資料型別
//p 是乙個變數,p的型別是int*
int *p ;// 指標指向誰,就把誰的位址賦值給指標p = (int*)123
;printf(
"%d\n
",(int)p)
int a = 10// 直接操作指標變數本身沒有意義;p = &a;
printf(
"%p,%p\n
",p,&a);
// 需要操作*p ,操作指標所指向的記憶體
*p = 100 //*p 相當於a
見圖理解:
//*有兩層含義
定義變數時 ,*代表的是型別 ,它是指標型別int *
在使用變數時,*代表操作指標所指向的記憶體
野指標就是儲存沒有意義位址的指標變數
//防止隨便用指標
//空指標,給指標變數賦值為null
//null就是數字0
//32位編譯器用32位大小(4位元組)儲存位址
//64位編譯器用64位大小(8位元組)儲存位址
//如何定義乙個合適型別的變數,儲存另乙個變數的位址
//在需要儲存變數位址的型別基礎上加乙個*
記憶體就是乙個大陣列,指標可以用[ ]
首先不能定義void的普通型別 void a ---報error(因為記憶體不知道要分配多少空間給a);
可以定義void * 因為只有兩種情況,一種是32位的,一種是64位的,可以分配固定空間
萬能指標:void * =void *******可以指向任何型別的變數,使用指標所指向的記憶體時,最好轉換它本身的指標型別
例子:
void *p =null;//1指標的加法不是傳統的加法,int a = 10
;p =&a; 注意這裡儲存的是a的首位址
*p = 222; 這裡會報錯 ,因為*p不能確定給它多少記憶體空間,如果是int *那麼是給4個位元組/char*是給乙個位元組,
但是void*,不能確定是給多少個位元組,
&a只是儲存的是首位址,不能確定位數就不能確定尾位址要轉換為
* ( (int*) p ) = 222; //不做型別轉換就無法確定步長,就無法確定操作多長的記憶體
//2步長由指標指向的資料型別決定
int//指標變數的含義a;int *p = &a;
printf(「p: %d,p=1;%d\n」,p,p+1
);//
p:1637816 ,p+1:1637820 說明int佔4個位元組
char
b;int *q= &b;
printf(「q: %d,q=1;%d\n」,q,q+1
);//
q:1637795 ,q+1:1637796 char佔乙個位元組
//指標所指向的空間
int a =10;int *p1 = &a;
*p1 = 100;//
等價於操作a, *p1操作指標所指向的空間
p1 = null; //
操作指標變數
//const 修飾*,代表指標所指向的記憶體是唯讀的
const
int *p2 = &a;
*p2 = 100; //
這裡會報錯,因為*p2已變為唯讀
p2 = null;//
這裡操作的是指標變數
//上面的等價於(看const的位置):
intconst *p3 = &a;
*p3 = 100;//
也會報錯
//const 修飾指標變數,代表指標變數的值為唯讀
int * const p4 = &a;
*p4 = 100;//
okp4 = null;//
errconst int * const p4 = &a;//都不能改,全是唯讀
指標基礎知識
那麼編譯器就在記憶體中開闢1個整型單元存放變數a,我們假設這個整型單元在記憶體中的位址是 0x1000 那麼記憶體0x1000單元中存放了資料10,每次我們訪問a的時候,實際上都是訪問的0x1000單元中的10.現在定義 int p p a 當編譯器遇到語句int p時,它也會在記憶體中給指標變數p...
指標基礎知識
指標的基礎知識 一 空指標的定義方法 int p1 nullptr int p2 0 include int p3 null int c 0 int p4 c 此種方法是錯誤的,不能將int型變數直接賦值給指標,即使其值是0也不行這三種方法定義的空指標是等價的,只是第三種需要包含標頭檔案cstdli...
c和指標 指標基礎知識
1 記憶體和位址 2 指標初始化 3 指標變數的內容 4 間接訪問操作符 5 非法指標 null指標 1 記憶體和位址 指標是儲存的位址,比如0x0,0x1 0x2 可以這麼理解 指標可以狹義理解為記憶體位址,是存放記憶體位址的變數。網上或者書上,總是一段很多字數去表示指標說什麼,剛開始學習時候,看...