C C 中的指標(筆記) 指標基礎知識總結

2022-02-04 02:59:40 字數 2829 閱讀 3810

記憶體區的每乙個位元組都有乙個編號,就是「位址」

如果在程式中定義了乙個變數,在對程式進行編譯或者執行時,系統會給這個變數分配記憶體單元,並確定他的記憶體位址(編號)

指標的實質就是記憶體位址,指標就是位址,位址就是指標

通常我們敘述時會把指標變數簡稱為指標,實際他們的含義不一樣

//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;

int a = 10

;p =&a; 注意這裡儲存的是a的首位址

*p = 222; 這裡會報錯 ,因為*p不能確定給它多少記憶體空間,如果是int *那麼是給4個位元組/char*是給乙個位元組,

但是void*,不能確定是給多少個位元組,

&a只是儲存的是首位址,不能確定位數就不能確定尾位址要轉換為

* ( (int*) p ) = 222; //不做型別轉換就無法確定步長,就無法確定操作多長的記憶體

//1指標的加法不是傳統的加法,

//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 可以這麼理解 指標可以狹義理解為記憶體位址,是存放記憶體位址的變數。網上或者書上,總是一段很多字數去表示指標說什麼,剛開始學習時候,看...