1. 程式人生 > >C++ 指針

C++ 指針

並不是 運算符 int 實際參數 賦值語句 strong 別名 變量名 每一個

  指針是 C++ 語言中的重要概念,也是 C++ 語言的重要特色。使用指針,可以使程序更加簡潔、緊湊和高效。

  計算機硬件系統的內存存儲器中,擁有大量的存儲單元。為了方便管理,必須為每一個存儲單元編號,這個編號就是存儲單元的“地址”。每個存儲單元都擁有唯一的地址。由於根據存儲單元的編號或地址就可以找到所需內存單元,所以通常也把這個地址稱為指針

1.指針變量的定義

  在 C++ 語言中,允許用一個變量來存放指針,這種變量稱為指針變量。因此,一個指針變量的值就是某個存儲單元的地址或稱為某存儲單元的指針。(個人感覺可以把所有的 “指針” 二字替換成 “地址” 來理解)

  其一般定義形式為:

    類型說明符 * 變量名;

  其中,* 表示這是一個指針變量,變量名即定義指針變量名,類型說明符表示本指針變量所指向的變量的數據類型。

  例如: int * p; 表示 p 是一個指針變量,它的值是某個整型變量的地址,或者說 p 指向一個整型變量。至於 p 究竟指向哪個整型變量,應由給 p 賦值的地址來決定。

  應該註意的是,一個指針變量只能指向同類型的變量,如 p 只能指向整型變量,不能時而指向一個浮點變量, 時而又指向一個字符變量。

2.兩個重要運算符

(1)取地址運算符 &  

  取地址運算符&是單目運算符,其結合性為自右至左,其功能是得到變量在存儲器中的首地址

操作對象是變量

(2)取內容運算符 *(指針運算符)  

  取內容運算符*是單目運算符,其結合性為自右至左,用來引用指針變量所指向的變量,操作對象是指針。在運算符之後跟的變量必須是指針變量。需要註意的是指針運算符*和指針變量說明中的指針說明符* 不是一回事。在指針變量說明中,* 是類型說明符,表示其後的變量是指針類型。而表達式中出現的 * 則是一個運算符用以表示指針變量所指的變量。

3.指針變量的賦值

  C++ 語言中提供了地址運算符 & 來表示變量的地址。其一般形式為 & 變量名;如 &a 表示變量 a 的地址,&b 表示變量 b 的地址。變量本身必須預先說明。設有指向整型變量的指針變量 p ,如果要把整型變量 a 的地址賦給 p 可以有以下3種方式。

  1.指針變量初始化的方法

  int a;

  int *p = &a;

  2.賦值語句的方法

  int a;

  int *p;

  p = &a;

  3.把一個指針變量的值賦給指向相同類型變量的另一個指針變量

  int a,*pa = &a,*pb;

  pb=pa; //把 a 的地址賦給指針變量 pb,由於 pa,pb均為指向整型變量的指針變量,因此可以相互賦值

4.指針變量作函數參數

  形參與實參

  (1)形參

    函數定義時使用的參數稱為“形式參數”,簡稱“形參”,其作用是告知使用者在使用該函數時需要傳遞的數據的類型與個數。此時的參數只有類型和個數的概念,無實際值。

  (2)實參

    在調用某一函數時使用的參數稱為“實際參數”,簡稱“實參”,其作用是將所需要的數據傳遞給相應的形參。此時實參要按照形參的類型和個數對應排列。實參是具體的數據,調用時會一一對應地傳遞給相應的形參。

  指針變量既可以作為函數的形參,也可以作為函數的實參。指針變量作實參時,與普通變量一樣,也是“值傳遞”,即將指針變量的值(一個地址傳遞給被調用函數的形參(必須是一個指針變量)。

  被調用函數不能改變實參指針變量的值(一個地址),但可以改變實參指針變量所指向的變量的值。為了能使用被調函數改變的變量值,應該使用指針作函數的實參(即轉遞地址)。其機制為:在執行被調函數時,使形參指針變量所指向的變量的值發生變化;函數調用結束後,通過不變的實參指針將變化的值保留下來。

5.引用

  引用的使用是 C++ 語言不同於 C 語言的一個重要新特性,也是對 C 的一個重要擴充。

  引用就是變量的一個別名,引用的聲明就是給某一個變量起別名,而且要求聲明引用時,必須同時對其進行初始化。引用的聲明格式如下:

  類型標識符 & 引用名 = 目標變量名

  例如:

  int a; int &are = a; //定義引用are,並且指明它是變量 a 的引用

  其中,類型標識符是指向目標變量的類型;& 在此用來標識當前是引用,而不是求地址運算符;聲明了變量的一個引用,表示該引用名是目標變量名的一個別名,並不是新定義了一個變量;引用本身也不是一種數據類型,因此引用本身不占存儲單元,系統也不給引用分配存儲單元

  聲明一個引用,等於目標變量多了一個名字,可以通過這個新的別名,也就是引用名來對變量進行操作,其效果和直接使用變量名進行操作完全一樣。例如:

  are = 3; 等價於 a = 3;

  

  

C++ 指針