0

私は常にポインターを完全に理解したことがありません。私は勉強の合間に、楽しみのためにこのちっぽけなブラックジャック ゲームを書いています。ポインターが何をするのかを完全に理解するには、このポインターの使用が正当であることを確認する必要があります。

現在、これは私が使用しているプログラムと関数の例です:

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;

を含むように関数宣言を変更した場合*、それは正しいでしょう。

私は本当にポインタを理解しようと努力しています.ポインタの基本的な有用性を理解できるように、これに関する助けや確認をいただければ幸いです.

4

1 に答える 1

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{

は の承認された署名の 1 つではありませんmain

int main() {
于 2013-09-11T01:54:40.767 に答える