章節結構
- 8.1 指針是什麼
- 8.2 指針變量
- 8.2.1使用指針變量的一個例子
- 8.2.2 怎樣定義指針變量
- 8.2.3 怎樣引用指針變量
- 8.2.4 指針變量做爲函數參數
8.1 指針是什麼
「定指四 引三條」
地址指向變量單元。地址就被形象化的稱爲指針。意思就是經過指針就能找以它爲地址的內存單元。
對於C語言來講,除了地址還要知道數據類型才能找到相應的內存單元。數組
存儲單元的地址和存儲單元的內容這二者的區別必定要弄清楚。 兩種訪問變量的方式:函數
- 直接訪問:按變量名進行的訪問
- 間接訪問:即將變量的地址存放在另外一變量中,而後經過訪問另外一變量來找到該變量的地址,從而訪問該變量。
指向就是經過地址來體現的。指針
因爲經過地址可以找到所需的變量單元。所以,能夠說地址指向該變量單元。code
指針變量:專門用來存放另外一變量的地址(即指針)的變量對象
指針變量就是地址變量,用來存放地址,指針變量的值就是地址(即指針)內存
指針VS指針變量 能夠說,變量i的指針是2000,但不能說i的指針變量是2000。
指針是一個地址,而指針變量是存放地址的變量。class
8.2.2 指針變量
指針變量:存放地址的變量,它用來指向另外一對象(如變量、數組、函數等)變量
8.2.2 怎樣定義指針變量(4條)
定義指針變量的通常形式: 類型名 * 指針變量名
類型名在此處又能夠稱之爲基類型。指針變量的基類型用來指定此指針變量能夠指向的變量的類型。數據類型
在定義指針變量時要注意引用
- (1)指針變量前面的「 * 」表示該變量爲指針類型變量。
- (2) 在定義指針變量時必須指定基類型
- 一個變量的指針的含義包括兩個方面
- 以存儲單元編號表示的純地址(如編號2000的字節)
- 它指向的存儲單元的數據類型(如int,char等)
- 一個變量的指針的含義包括兩個方面
- (3)如何表示指針類型。指向整型數據的指針類型表示爲
int *
,讀做「指向int的指針」,簡稱「int指針」 - (4) 指針變量中只能存放地址(指針),不要將一個整數賦給一個指針變量
8.2.3 怎樣引用指針類型變量
在引用指針變量時,可能有3種狀況
- (1)給指針變量賦值
int * p;p = &a //此處代表a爲普通的int變量,p爲int指針
- (2)引用指針變量指向的變量
printf("%d",*p)// 此處爲解指針,獲得的是指針p指向的變量的值
- (3)引用指針變量的值(是一個地址)
printf("%o",p);
&
取地址運算符。&a
是變量a的地址*
指針運算符(或稱間接訪問運算符),* p
表明指針變量p指向的對象- 星號
*
有兩種含義,在定義時,表示類型,爲指針類型。在其餘地方時,則表示指針運算符
& 取指針運算符
8.2.4指針變量做爲函數參數
函數參數不只能夠是整形、浮點型、字符型等數據,還能夠是指針類型。它的做用是將一個變量的地址傳送到另外一個函數中。
不能企圖經過改變指針形參的值而使指針參數的值改變
不能經過執行調用函數來改變實參指針變量的值,可是能夠改變實參指針變量所指向變量的值。
這表示指針變量自己不能被改變,由於指針變量表明的是地址,所以指針變量的值是不可改變的左值;而指針變量所指向變量,是能夠改變的,所以能夠改變指針變量所指向變量的值。
void swap(int *p1,int *p2) // 這是想經過執行調用函數來改變指針變量自己的值,這是行不通的 { p = p1; p1 = p2; p2 = p; } `void swap1(int * p1,int *p2) // 經過調用函數改變實參指針變量所指向變量的值 { int temp; temp = *p1; *pt1 = * pt2; *pt2 = temp; }
int * p
指向p的指針
&a
變量a的地址
a = * p
; 指針變量p指向的對象