程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> C++中指針入門

C++中指針入門

編輯:vc教程

什麼是指針?

其實指針就像是其它變量一樣,所不同的是一般的變量包含的是實際的真實的數據,而指針是一個指示器,它告訴程序在內存的哪塊區域可以找到數據。這是一個非常重要的概念,有很多程序和算法都是圍繞指針而設計的,如鏈表。

開始學習

如何定義一個指針呢?就像你定義一個其它變量一樣,只不過你要在指針名字前加上一個星號。我們來看一個例子:下面這個程序定義了兩個指針,它們都是指向整型數據。

int * pNumberOne;
int * pNumberTwo;

你注意到在兩個變量名前的“p”前綴了嗎?這是程序員通常在定義指針時的

一個習慣,以提高便程序的閱讀性,表示這是個指針。現在讓我們來初始化這兩個指針:

pNumberOne = &some_number;
pNumberTwo = &some_other_number;

&號讀作“什麼的地址”,它表示返回的是變量在內存中的地址而不是變量本身的值。在這個例子中,pNumberOne 等於some_number的地址,所以現在pNumberOne指向some_number。 如果現在我們在程序中要用到some_number,我們就可以使用pNumberOne。

我們來學習一個例子:

在這個例子中你將學到很多,如果你對指針的概念一點都不了解,我建議你多看幾遍這個例子,指針是個很復雜的東西,但你會很快掌握它的。

這個例子用以增強你對上面所介紹內容的了解。它是用C編寫的(注:原英文版是用C寫的代碼,譯者重新用C++改寫寫了所有代碼,並在DEV C++ 和VC++中編譯通過!)

#include <iostream.h>

void main()
{
// 聲明變量:

int nNumber;
int *pPointer;

// 現在給它們賦值:

nNumber = 15;
pPointer = &nNumber;

//打印出變量nNumber的值:

cout<<"nNumber is equal to :"<< nNumber<<endl;

// 現在通過指針改變nNumber的值:

*pPointer = 25;

//證明nNumber已經被上面的程序改變

//重新打印出nNumber的值:

cout << "nNumber is equal to :" << nNumber << endl;
}

通讀一下這個程序,編譯並運行它,務必明白它是怎樣工作的。如果你完成了,准備好,開始下一小節。

陷井!

試一下,你能找出下面這段程序的錯誤嗎?

#include <iostream.h>

int *pPointer;

void SomeFunction();

{
int nNumber;
nNumber = 25;

//讓指針指向nNumber:

pPointer = &nNumber;
}

void main()
{
SomeFunction(); //為pPointer賦值

//為什麼這裡失敗了?為什麼沒有得到25

cout<<"Value of *pPointer: "<<*pPointer<<endl;
}

這段程序先調用了SomeFunction函數,創建了個叫nNumber的變量,接著讓指針pPointer指向了它。可是問題出在哪兒呢?當函數結束後,nNumber被刪掉了,

因為這一個局部變量。局部變量在定義它的函數執行完後都會被系統自動刪掉。也就是說當SomeFunction 函數返回主函數main()時,這個變量已經被刪掉,但pPointer還指著變量曾經用過的但現在已不屬於這個程序的區域。如果你還不明白,你可以再讀讀這個程序,注意它的局部變量和全局變量,這些概念都非常重要。

但這個問題怎麼解決呢?答案是動態分配技術。注意這在C和C++中是不同的。由於大多數程序員都是用C++,所以我用到的是C++中常用的稱謂。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved