指標的本質分析

2021-08-20 13:02:54 字數 1641 閱讀 1403

變數回顧:程式中的變數只是一段儲存空間的別名,那麼是不是必須通過這個別名才能使用這段儲存空間?

通過乙個指標訪問它所指向的位址的過程稱為間接訪問或借引用指標。這個用於指向間接訪問的操作符是單目操作符 *

1. 在指標宣告時,* 號表示所宣告的變數為指標。

2. 在指標使用時,* 號表示取指標所指向的記憶體空間中的值。

*號類似一把鑰匙,通過這把鑰匙可以開啟記憶體,讀取記憶體中的值。

指標定義並初始化,與指標定義然後賦值的區別

指標定義時可以初始化,指標的初始化其實就是給指標變數初值(跟普通變數的初始化沒有任何區別)

1. 指標變數定義同時初始化格式是: int a = 32; int * p = &a;

2. 不初始化指標變數先定義再賦值是: int a = 32; int * p; p = &a;

取位址符使用時直接加在乙個變數前面,然後取位址符和變數加起來構成乙個新的符號,這個符號表示這個變數的位址。

示例**:指標使用示例

#include 

int main()

輸出結果

00aff99c, 00aff99c, 10

4, 4, 00aff990

4, 4, 00aff994

4, 4, 00aff998

從輸出結果我們可以得出結論:

(1) 從列印pi和&i的值,我們得知:指標變數pi 儲存的值為指向變數i 的位址。

(2) 從pi = 10;和輸出變數i的值,我們得知:需要訪問變數i 位址裡面的值需要使用間接訪問操作符

(3) 從列印sizeof(int*),sizeof(char*),sizeof(float*)的值,我們得知:指標變數的大小都為4個位元組,這是因為在32位系統中,儲存乙個位址需要用到4個位元組的大小。

指標式變數,也因此可以宣告指標引數

當乙個函式體內部需要改變實參的值,則需要使用指標引數

函式呼叫時實參值將複製到形參

指標適用於複雜資料型別作為引數的函式中

示例**:利用指標交換變數

#include 

int swap(int* a, int* b)

int main()

輸出結果

aa = 1, bb = 2

aa = 2, bb = 1

const int * p; //p可變,p指向的內容不可變

int const * p; //p可變,p指向的內容不可變

int * const p; //p不可變,p指向的內容可變

const int * const p //p和p指向的內容都不可變

口訣:左數右指

當const出現在 * 號左邊時指標指向的資料為常量

當const出現在 * 號右邊時指標本身為常量

示例**:常量與指標

#include 

int main()

26 指標的本質分析

程式中的變數是一段儲存空間的別名,本質上是一段儲存空間。問題 是不是只能通過變數使用儲存空間?include int main 總結 可以通過指標來使用儲存空間。在指標宣告時,號表示所宣告的變數為指標 在指標使用時,號表示取指標所指向的記憶體空間中的值。指標的特殊點 1.指標的本質是變數,但變數的值...

26 指標的本質分析

注 部落格中內容主要來自 狄泰軟體學院 部落格僅當私人筆記使用。測試環境 ubuntu 10.10 gcc版本 4.4.5 一 變數回顧 程式中的變數只是一段儲存空間的別名,那麼是不是必須通過這個別名才能使用這段儲存空間?二 思考 下面的程式輸出什麼?為什麼?int i 5 int p i prin...

指標的本質

於 c與機器聯絡緊密,抽象程度不是太高,所以機器層面的位址也拿過來了,改名叫指標。遇到指標,要讀成 位址變數 其實指標就是乙個存放整數 位址就是乙個整數 的變數而已,多少級都是如此。一 定義乙個指標 int p 與訪問指標指向的變數 p 二 語句int p 有三個意思 1.p是乙個變數,用來存放位址...