第八章——善於利用指針(一)——指針和指針變量

章節結構

  • 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指向的對象

相關文章
相關標籤/搜索