【小白学习C++ 教程】七、在C++指针声明和指针相关概念
@Author:Runsen
C++ 指針學(xué)習(xí)起來(lái)有點(diǎn)難,但是很重要。一些 C++ 程序使用指針更容易執(zhí)行,另外其他 C++ 程序,例如動(dòng)態(tài)內(nèi)存分配,沒有指針就無(wú)法執(zhí)行。
每個(gè)變量都是一個(gè)內(nèi)存位置,每個(gè)內(nèi)存位置都定義了其地址,可以使用與號(hào)(&)運(yùn)算符訪問(wèn)該地址,該運(yùn)算符表示內(nèi)存中的地址。
下面代碼考慮以下將打印定義的變量的地址
#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;}輸出如下
Address of var1 variable: 0x61fe1c Address of var2 variable: 0x61fe12指針聲明
在編程語(yǔ)言中,指針是一個(gè)變量,其值是另一個(gè)變量的地址。與任何變量或常量一樣,您必須先聲明一個(gè)指針,然后才能使用它。
指針變量聲明的一般形式是 :
type *var-name;這里,type是指針的類型;它必須是有效的 C++ 類型,并且var-name是指針變量的名稱。
用于聲明指針的星號(hào)與用于乘法的星號(hào)相同。但是,在此語(yǔ)句中,星號(hào)用于將變量指定為指針。
下面是有效的指針聲明
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ù)類型,無(wú)論是整數(shù)、浮點(diǎn)數(shù)、字符還是其他類型,都是相同的,一個(gè)長(zhǎng)的十六進(jìn)制數(shù),代表同一個(gè)內(nèi)存地址。
不同數(shù)據(jù)類型的指針之間的唯一區(qū)別是指針指向的變量或常量的數(shù)據(jù)類型。
C++ 使用指針
| &(與號(hào)) | 地址運(yùn)算符 | 確定變量的地址。 |
| ?(星號(hào)) | 間接運(yùn)算符 | 訪問(wèn)地址的值。 |
具體輸出如下
變量Var的值: 5 變量Var的中存儲(chǔ)的地址ip: 0x61fe14 訪問(wèn)指針中可用地址處的值:5請(qǐng)注意,0x0相當(dāng)于0. 它只是 的十六進(jìn)制表示0。
指針的概念
指針有很多但很簡(jiǎn)單的概念,它們對(duì) C++ 編程非常重要。以下是 C++ 程序員應(yīng)該清楚的幾個(gè)重要的指針概念 -
| 空指針 | C++ 支持空指針,它是在幾個(gè)標(biāo)準(zhǔn)庫(kù)中定義的零值常量。 |
| 指針?biāo)阈g(shù) | 有四種算術(shù)運(yùn)算符可用于指針:++、–、+、- |
| 指針與數(shù)組 | 指針和數(shù)組之間有著密切的關(guān)系。 |
| 指針數(shù)組 | 您可以定義數(shù)組來(lái)保存多個(gè)指針。 |
| 指向指針的指針 | C++ 允許您在指針上使用指針等等。 |
| 將指針傳遞給函數(shù) | 通過(guò)引用或通過(guò)地址傳遞參數(shù)都允許被調(diào)用函數(shù)在調(diào)用函數(shù)中更改傳遞的參數(shù)。 |
| 從函數(shù)返回指針 | C++ 允許函數(shù)返回指向局部變量、靜態(tài)變量和動(dòng)態(tài)分配的內(nèi)存的指針。 |
空指針
如果沒有要分配的確切地址,將指針 NULL 分配給指針變量。分配為 NULL 的指針?lè)Q為空指針。
#include <iostream>using namespace std; int main () {int *ptr = NULL;cout << "The value of ptr is " << ptr ;}當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生以下結(jié)果 -
The value of ptr is 0在大多數(shù)操作系統(tǒng)上,不允許程序訪問(wèn)地址 0 處的內(nèi)存,因?yàn)樵搩?nèi)存是由操作系統(tǒng)保留的。空指針:指針變量指向內(nèi)存中編號(hào)為0的空間
要檢查空指針,您可以使用 if 語(yǔ)句如下 -
if(ptr) // succeeds if p is not null if(!ptr) // succeeds if p is null指針?biāo)阈g(shù)
指針是一個(gè)地址,它也是一個(gè)數(shù)值;因此,可以像對(duì)數(shù)值一樣對(duì)指針執(zhí)行算術(shù)運(yùn)算。有四種算術(shù)運(yùn)算符可用于指針:++、--、+和-。
“指針++”和“指針–”表示指針?biāo)傅刂返南乱粋€(gè)或前一個(gè)數(shù)據(jù)的地址。
#include <iostream> using namespace std; int main() {int a[5];int i;int *p;for(i=0; i<5; i++)cin>>a[i];cout<<endl;for(i=0; i<5; i++)cout<<a[i]<<" ";//使用數(shù)組名和下標(biāo)訪問(wèn)的方式訪問(wèn)數(shù)組進(jìn)行輸出for(i=0; i<5; i++)cout<<*(a+i)<<" ";//使用數(shù)組名和指針運(yùn)算訪問(wèn)的方式進(jìn)行輸出for(p=a; p<(a+5); p++)cout<<*p<<" ";//使用指針變量訪問(wèn)的方式進(jìn)行輸出return 0; }運(yùn)行結(jié)果
1 2 3 4 51 2 3 4 5 1 2 3 4 5 1 2 3 4 5總結(jié)
以上是生活随笔為你收集整理的【小白学习C++ 教程】七、在C++指针声明和指针相关概念的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 津巴布韦聘请旅美经济学家向凌云教授为特邀
- 下一篇: 【小白学习C++ 教程】八、在C++指针