標籤:電腦硬體 並且 出現 功能 參數 改變 方便 形參與實參 注意
指標是 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++ 指標