指針

2020-08-13 02:24:56

文主要介紹一下C語言中的指針。

什麼是指針

指針就是地址,而指針變數就是儲存地址的變數。

雖然用數表示地址,但是地址的取值範圍可能不同於整數的範圍,所以一定不能用普通整型變數儲存地址。

指針變數的宣告

對指針變數的宣告與對普通變數的宣告基本一樣,唯一的不同就是必須在指針變數名字前放置星號:

int *p;

上述宣告說明p是指向int型別物件的指針變數。

取地址運算子和間接定址運算子

取地址運算子:如果x是變數,那麼**&x**就是x在記憶體中的地址。

間接定址運算子:爲了獲得對指針所指向物件的存取,可以使用(間接定址)運算子。如果p是指針,那麼*p表示p當前指向的物件。

一旦指針變數指向了物件,就可以使用*(間接定址)運算子存取儲存在物件中的內容。

j = *&i;      /* same as j = i; */

指針賦值

C語言允許使用賦值運算子進行指針的複製,前提是兩個指針具有相同的型別。

賦值語句*q = *p;是把p指向的值(i的值)複製到q指向的物件(變數j)中。

指針作爲參數

宣告相應的形式參數p爲指針。呼叫函數時,p的值爲&x,因此p(p指向的物件)將是x的別名。函數體內*p的每次出現都將是對x的間接參照,而且允許函數既可以讀取x也可以修改x。

void decompose(double x, long *int_part, double *frac_part)
{
  *int_part = (long) x;
  *fract_part = x - *int_part;
}

用const保護參數

當呼叫函數並且把指向變數的指針作爲參數傳入時,通常會假設函數將修改變數,但是,僅需要檢查變數的值而不是改變它的值也是可能的。可以使用單詞const來表明函數不會改變指針參數所指向的物件。const應放置在形式參數的宣告中,後面緊跟着形式參數的型別說明:

void f(const int *p)
{
  *p = 0;   /*** WRONG ***/
}

這一用法表明p是指向「常整數」的指針。試圖改變*p是編譯器會檢查的一種錯誤。

指針作爲返回值

永遠不要返回指向自動區域性變數的指針,一旦函數返回,區域性變數就不存在了,所以指向區域性變數的指針將是無效的。

微信公衆號 長夜西風

個人網站 http://www.cmder.info/