C++ 指針學(xué)起來非常容易和有趣。一些 C++ 的任務(wù)用指針執(zhí)行非常容易,諸如動(dòng)態(tài)分配內(nèi)存的 C++ 工作,如果沒有指針將無法執(zhí)行。
如你所知,每個(gè)變量有一個(gè)內(nèi)存位置,每個(gè)內(nèi)存位置都有它的地址定義,這個(gè)地址定義可以使用表示內(nèi)存中地址的和運(yùn)算符 (&) 進(jìn)行訪問。下面我們將打印定義的變量的地址:
#include <iostream>
using namespace std;
int main ()
{
int var1;
char var2[10];
cout << "Address of var1 variable: ";
cout << &var1 << endl;
cout << "Address of var2 variable: ";
cout << &var2 << endl;
return 0;
}
當(dāng)上述代碼被編譯執(zhí)行時(shí),它將產(chǎn)生如下結(jié)果:
Address of var1 variable: 0xbfebd5c0
Address of var2 variable: 0xbfebd5b6
指針是一個(gè)變量,它的值是另一個(gè)變量的地址。像任何變量或常量一樣,你必須在使用它之前聲明一個(gè)指針。
指針變量聲明的一般形式為:
type *var-name;
在這里,type 是指針的基類型;它必須是一個(gè)有效的 C++ 類型,var-name 是指針變量的名稱。用來聲明一個(gè)指針的星號(hào)與你用于乘法的星號(hào)是一樣的。然而,在這個(gè)語句中,這個(gè)星號(hào)用來指定一個(gè)變量作為一個(gè)指針。以下是有效的指針聲明:
int*ip;// pointer to an integer
double *dp;// pointer to a double
float *fp;// pointer to a float
char *ch // pointer to character
所有指針的值的實(shí)際的數(shù)據(jù)類型,或者是整數(shù),浮點(diǎn)數(shù),字符或者是其他,同樣的一個(gè)長十六進(jìn)制數(shù)表示一個(gè)內(nèi)存地址。不同的數(shù)據(jù)類型的指針之間的唯一區(qū)別在于指針指向的變量或常量的數(shù)據(jù)類型。
這里有幾個(gè)我們將非常頻繁的使用指針的重要的操作。
(a) 我們定義一個(gè)指針變量;
(b) 將一個(gè)變量的地址分配給指針;
(c) 最后使用在指針變量中的地址來訪問這個(gè)值。
這是通過使用一元運(yùn)算符 * 完成的,返回位于通過運(yùn)算符指定地址的變量的值。以下示例使用這些操作:
#include <iostream>
using namespace std;
int main ()
{
int var = 20; // actual variable declaration.
int *ip;// pointer variable
ip = &var; // store address of var in pointer variable
cout << "Value of var variable: ";
cout << var << endl;
// print the address stored in ip pointer variable
cout << "Address stored in ip variable: ";
cout << ip << endl;
// access the value at the address available in pointer
cout << "Value of *ip variable: ";
cout << *ip << endl;
return 0;
}
當(dāng)上述代碼被編譯執(zhí)行時(shí),它將產(chǎn)生如下結(jié)果:
Value of var variable: 20
Address stored in ip variable: 0xbfc601ac
Value of *ip variable: 20
指針有很多但是很容易的概念,它們對(duì) C++ 的編程非常重要。這里有一些 C++ 程序員應(yīng)該必須清楚的重要的指針概念:
概念 | 描述 |
---|---|
C++ 空指針 | C++ 支持空指針,它是在幾個(gè)標(biāo)準(zhǔn)庫中被定義值為零的一個(gè)常量。 |
C++ 指針?biāo)惴?/td> | 這里有四種可用于指針的算術(shù)運(yùn)算符:++,--,+,- |
C++ 指針與數(shù)組 | 指針與數(shù)組之間有著密切的關(guān)系。讓我們看一看? |
C++ 指針數(shù)組 | 你可以定義保存大量指針的數(shù)組。 |
C++ 指針的指針 | C++ 允許您有指針的指針,等等。 |
將指針傳遞給函數(shù) | 通過引用或通過地址傳遞參數(shù),兩種方法都可以使被調(diào)用的函數(shù)在調(diào)用函數(shù)中傳遞的參數(shù)發(fā)生更改。 |
從函數(shù)返回指針 | C++ 允許函數(shù)返回一個(gè)指向本地變量的指針,同樣也允許返回指向靜態(tài)變量和動(dòng)態(tài)分配內(nèi)存的指針。 |