tft每日頭條

 > 圖文

 > C語言給不确定的指針變量賦值

C語言給不确定的指針變量賦值

圖文 更新时间:2024-07-20 15:16:35

C語言給不确定的指針變量賦值(C語言中的指針指針的賦值和指向)1

文/Edward

當我們将一個指針變量定義好之後,接下來需要考慮的問題就是如何來使用這個指針變量了。前面學習普通變量的時候,我們知道,一個變量的操作其實就是分成讀和寫兩個步驟。而指針變量在平時使用的時候,也是主要分成讀和寫兩個操作步驟,不同于常規變量的是,指針變量的賦值運算其實是寫入一個普通變量的地址,我們将這一個過程稱為指針變量的"指向操作"。而對指針變量讀取的時候,由于指針變量存放的是某一個變量的地址,而讀取某一個地址這個操作往往是沒有意義的,因此在指針變量讀取的時候,大多數情況我們都是讀取指針變量指向的那個變量裡面的内容。

指針變量的指向操作,其實就是将定義好的一個指針變量指向某一個變量或者内存區域,其方式為:"數據類型 *指針變量名 = &指向的變量;"。當然也可以先定義指針,再将其指向某一個變量,即:

"數據類型 *指針變量;

指針變量 = &指向的變量;"

在使用時,一定要注意上面"*"号的用法差異。還需要注意的是,一個指針變量隻能指向與其數據類型相同的變量。

一旦一個指針指向某一個變量之後,操作這個指針變量就如同操作其指向的那個變量了。在操作時,我們使用"*指針變量名"的形式進行讀取和寫入,就等同于對指針所指向變量的讀和寫操作。指針變量指向變量的讀取如圖1所示。

C語言給不确定的指針變量賦值(C語言中的指針指針的賦值和指向)2

圖1 指針變量指向變量的讀取

同時,指針變量指向變量的賦值如圖2所示。

C語言給不确定的指針變量賦值(C語言中的指針指針的賦值和指向)3

圖2 指針變量指向變量的賦值

由圖1和圖2中我們可以看出,當指針變量p指向了變量a之後,使用*p進行操作,就如同在操作變量a。以上就是指針變量的操作,非常簡單。

需要注意的是,當一個指針被定義好之後,一定要對其進行初始化,即指向某一個變量的地址,沒有指向任何變量的指針被稱為"空指針",空指針無法去做任何操作,一旦對空指針進行賦值,那麼編譯出來的程序将會無法使用,如圖3所示。

C語言給不确定的指針變量賦值(C語言中的指針指針的賦值和指向)4

圖3 指針未指向變量輸出錯誤

這種沒有指向任何變量的指針被稱為"野指針",注意不是"空指針",空指針和野指針是不一樣的指針,野指針是非法的,空指針是合法的,關于空指針和野指針的區别為:

野指針是不知道指向什麼地方的指針,它的出現主要原因是沒有對指針進行初始化,或者指針所指向的内存塊被釋放之後,沒有将該指針設置成空指針。

空指針是指指向NULL的指針,NULL為C語言定義的宏,為0,關于空指針我們後面會詳細講解。

我們前面說過,一個變量的地址是當我們在定義這個變量時由編譯器主動随機分配的,因此如果我們在定義一個指針變量之後,随意地對其賦值,對于用戶來說,我們不清楚哪一塊内存地址可用,那一塊不可用。那麼這樣操作是不是就是不合法的呢?其實并不是,比如我們在做單片機的時候,某一個外設的地址你可以從數據手冊上面查到,那麼我們此時要定義一個指針來指向這個地址,以便給後續的程序使用,那麼這種情況下,我們勢必需要顯示地将一個地址賦值給這個指針變量。反過來說,指針就是由于可以任意地指向任何地方,所以一旦使用不當,比如将一個指針指向一些受保護的内存塊并且修改這一塊内容,那麼會引起一些不可估量的錯誤。

如果對一個指針貿然地賦值一個常量,那麼編譯器會不知所措,在這種不知所措之下,編譯器隻會報一個警告,這個警告的中文意思就是,将一個int類型的變量賦值給一個(int *)類型的變量,如圖4所示。

C語言給不确定的指針變量賦值(C語言中的指針指針的賦值和指向)5

圖4 給指針賦值一個常量

正确的做法是,我們需要将這個常量強制轉換成一個指針類型,關于強制類型轉換其實很簡單,隻需要将這個變量或者常量前面用括号加一個你所需要轉換的類型即可。如圖5所示。

C語言給不确定的指針變量賦值(C語言中的指針指針的賦值和指向)6

圖5 給指針賦值一個常量地址

現在我們來做一個實例,先定義一個變量a,假設這個變量a的地址是我們硬件某一個外設的地址,我們可以先編程獲取其地址,如圖6所示。

C語言給不确定的指針變量賦值(C語言中的指針指針的賦值和指向)7

圖6 獲取某一個變量的地址

接着,我們來定義一個指針變量,并且顯示地将這個地址賦值給這個變量,接着,對這個指針所指向的内存進行賦值,我們來看看最終變量a裡面的内容是否會跟着改變。既然模拟的是硬件,那麼此時有個小提示需要注意,我們一定要用"volatile"關鍵詞來修飾這個内存區域。如圖7所示。

C語言給不确定的指針變量賦值(C語言中的指針指針的賦值和指向)8

圖7 指針指向外設模拟

通過這個實驗我們可以看出,隻要指針使用合理,對它進行地址賦值是可以很方便地去使用某一個硬件外設的。

以上就是指針的簡單應用,接下來的内容,我們正式開始學習指針。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved