26 指標的本質分析

2021-10-02 08:37:10 字數 2659 閱讀 2946

注:部落格中內容主要來自《狄泰軟體學院》,部落格僅當私人筆記使用。

測試環境:ubuntu 10.10

gcc版本:4.4.5

一、變數回顧

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

二、思考:

下面的程式輸出什麼?為什麼?

int i = 5;

int* p = &i;

printf("%d,%p\n",i,p); //5,i的位址

*p = 10;

printf("%d,%p\n",i,p); //10,i的位址

三、*號的意義

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

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

3)小貼士

例項分析

指標使用示例

26-1.c

#include int main()

操作:

1)gcc 26-1.c -o 26-1.out編譯正確,列印結果:

0xbfa21750, 0xbfa21750, 10

4, 4, 0xbfa21754

4, 4, 0xbfa21758

4, 4, 0xbfa2175c

分析:

1. 指標也有位址

2. 指標占用記憶體大小一致,大小與作業系統有關  

四、傳值呼叫與傳址呼叫

1) 指標是變數,因此可以宣告指標引數

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

3) 函式呼叫時實參值將賦值到形參

4) 指標適用於複雜資料型別作為引數的函式中(如果複雜型別用數值傳遞效率會下降)

程式設計實驗

利用指標交換變數

26-2.c

#include /*

知識點:傳址操作

*/int swap(int* a, int* b)

int main()

操作:

1)gcc 26-2.c -o 26-2.out編譯正確,列印結果:

aa = 1, bb = 2

aa = 2, bb = 1

分析:

傳址方式,修改了變數aa和bb數值。

五、常量與指標

1) const 

int* p;                //p

可變,p

指向的內容不可變

2) int 

const* p;                //p

可變,p

指向的內容不可變

3) int* const p;                //p

不可變,

p指向的內容可變

4) const 

int* const p;      //p和p

指向的內容都不可變

口訣:左數右指

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

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

例項分析

常量與指標

26-3.c

#include int main()

操作:

1)gcc 26-3.c -o 26-3.out編譯錯誤:

26-3.c: in function 『main』:

26-3.c:12:2: error: assignment of read-only location 『*p1』

*p1 = 1;

^錯誤:給唯讀*p1儲存單元賦值

26-3.c:15:2: error: assignment of read-only location 『*p2』

*p2 = 2;

^錯誤:給唯讀*p2儲存單元賦值

26-3.c:19:2: error: assignment of read-only variable 『p3』

p3 = null;

^錯誤:給唯讀變數p3賦值

26-3.c:21:2: error: assignment of read-only location 『*p4』

*p4 = 4;

^錯誤:給唯讀*p4儲存單元賦值

26-3.c:22:2: error: assignment of read-only variable 『p4』

p4 = null;

^錯誤:給唯讀變數p4賦值

小結:

1) 指標是c語言中一種特別的變數

2) 指標所儲存的值是記憶體的位址

3) 可以通過指標修改記憶體中的任意位址內容

26 指標的本質分析

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

NO15 指標的本質分析

變數 程式中的變數只是一段儲存空間的別名,那麼是不是必須通過這個別名才能使用這段變數?可以 號的意義 在指標宣告時,號表示所宣告的變數為指標 在使用時,號表示取指標所指向的記憶體空間中的值 指標是變數,因此可以宣告指標引數,當乙個函式體內部需要改變實參的值,則需要使用指標引數,函式呼叫時實參值將賦值...

24 指標的本質

變數代表一段儲存空間的別名,但並不是只能通過變數才能訪問一段記憶體了,指標也可以 1 號的意義 p i p i 為什麼指標的大小占用為4個位元組?因為如果系統是32位,位址定址範圍為4個位元組,所有的32位位址值都可以用4個位元組表示,所以32位系統指標的大小都為4個位元組 2 傳值呼叫與傳址呼叫 ...