2013-09-11 130 views
0

我從來沒有完全理解指針。我在學習方面寫了這個有趣的21點遊戲,我需要確認指針的這種使用是合法的,這樣我才能完全理解他們做了什麼。瞭解C++中的指針

目前是這樣的程序和功能我使用的例子:

void dealcard(int hand){ 
    hand+=rand()%10+2; 
} 

int()main{ 
    int playerHand; 
    ... 
    *blackjack stuff* 
    ... 
    if(hit){ 
     deal(hand); 
     } 
現在

,如果我是正確的,上面會不會因爲我打算,因爲函數使用變量的副本工作在被應用於原稿之前被清除,並且hand將不會被改變。

,如果我把它改成像

 int b; 
    int *hand; 
    hand=&b; 

,改變了函數聲明爲包括*,那麼這將是正確的。

我真的很難理解指針,我會很感激任何幫助或確認,所以我可以理解它們的基本用處。

+0

很多人問類似的問題之前,請閱讀此頁「相關」的問題:-) – tdihp

+0

你的人回答這個問題之前,肯定它是C++? //你的代碼看起來比C++更像C。 – Mansueli

+0

抱歉有些混亂。我正在閱讀一篇關於使用C作爲例子而不是C++的指針的文章。如果這個問題是重複的,我也很抱歉,我意識到這裏的社區正在努力保持網站的高標準 – gr33kbo1

回答

2

這是正確的。這也應該是C而不是C++ :-)的方式,你會做這樣的話會是:

void dealcard (int *pHand) { 
    *pHand += rand() % 10 + 2; 
} 
: 
int hand = 0; 
dealcard (&hand); 

C++有這個叫做引用漂亮的東西,這意味着你不再需要執行排序尋址體操由C.需要,可以這樣寫你的函數:

void dealcard (int &hand) { 
    hand += rand() % 10 + 2; 
} 
: 
int hand = 0; 
dealcard (hand); 

而且,順便說一句,沒有真正相關的你的問題:

int()main{ 

不是main在接受簽名的一個,我懷疑你的意思是:

int main() { 
+0

有趣。所以當作爲函數的參數傳遞時,我會通過引用傳遞。謝謝。 – gr33kbo1

+0

@ gr33kbo1:如果這回答了你的問題,那麼如果你[接受答案](http://stackoverflow.com/help/someone-answers)會很好。 – Blastfurnace