首頁>技術>

C語言指標

其實想了好久,很糾結要不要寫一篇關於C語言指標的文章,我很擔心自己把它講得不清楚,眾所周知C語言程式設計的魅力正是指標,難度也在指標,很多接觸很久的C語言都不能說精通他,但是今天我決定嘗試一下把C語言的指標儘可能地去講清楚,篇幅可能有一點長,希望你耐心看完,有不足的地方可以共同探討。

首先我們先記住一個概念:指標也是一個變數,只是這個變數的值比較特殊,它存放的是地址;

指標和記憶體

我們結合一個例子來講指標:

int *p;

在這裡我們定義了一個指標p,但是現在沒沒有對它進行初始化,在C語言中編譯過程中這條語句會給p開闢一塊記憶體空間,空間大小呢由型別決定在32位系統上int 為四個位元組,所以現在就為p變數開闢了大小為4個位元組的空間,並且限定了這4個位元組裡面只能存放某個記憶體的地址(什麼意思?就是說申請的空間只能存放地址,而不是具體數值),即使你存入別的任何資料都將會被當做地址處理,而且申請的這個記憶體地址開始連續的4個位元組上只能存某個int型別的資料。

int *p //p只能存放int型別的地址

char *p //p只能存放cahr 型別的地址

float *p //p只能存放float型別的地址

這樣看理解了麼?

也就是說你宣告一個指標的時候:申請的型別是什麼型別他就是什麼型別的指標。

給你舉個例子:

int a;

a=10.12345;

printf("a=%d\n",a);

你覺得a打印出來的值是多少?最開始宣告的型別是整型,你給他一個浮點型的資料,他也只會當做整型去處理,結果輸出來的是10.指標變數也是也一樣的,申請的時候是什麼型別,最好就給他什麼樣的型別地址,否則可能不會打到你預期的效果。

指標的使用

我們來看一下面的程式碼:

int a=10;

int *p;

p=&a;

printf("a=%d p=%d",a,*p);

&符號為取地址符:&a就是取a的地址;

這裡我們把a的地址賦給指標變數p,我們可以理解現在指標變數p裡面存放的是a的地址(p指標指向a的地址)那我們現在我們就有兩種辦法可以得到我們的資料10;

一個是變數名:a 另外一個就是指標p,星號p(*p)的意思是把指標p裡面的值取出來,那麼我們都知道現在p裡面存放的是a的地址程式取值的時候直接根據地址去記憶體裡面把值取出來。

舉一個例子:圖書館裡面有一排排書架存放著很多書籍,這時候老師叫你去圖書館拿書,但是怕你忘記了,然後他給你一個寫了一張紙條上面寫著“2號書架第3本”,然後你就拿著紙條去圖書館找到書並且拿回來給你老師,這個過程叫什麼?

這個過程你充當的就是一個指標,手裡拿的紙條就是地址,圖書館書架書架上那本書就是你要讀取的資料。

什麼叫型別不一致,你老師最開始叫你去圖書館取書,但是你拿著紙條去藥店,藥店也是貨架,結果你拿到了2號架子上第3個藥,雖然你也是拿到東西了,但是是你老師想要的麼?

總結一下:

1、指標也是變數。

2、指標裡面放的是地址;(你把哪個變數的地址給他他就存誰的地址)。

3、使用指標時要和宣告的型別一致。

就暫時這樣簡單地說一下指標了吧,等後期對指標有了新的領悟之後會再詳細寫一篇。希望給讀者能夠提出一些自己的看法,你是怎麼理解指標的和我分享一下!

6
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Spring Cloud Gateway 雪崩了,我 TM 人傻了