注:部落格中內容主要來自《狄泰軟體學院》,部落格僅當私人筆記使用。
測試環境: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 傳值呼叫與傳址呼叫 ...