6
votes

Passage de la matrice de caractère dans une fonction?

Voici mon codage problématique: Je dois prendre le nom de 2 joueurs. Ensuite, lorsque la pièce suivante lorsque le marqueur de lecteur modifie le nom stocké dans "CurrentPlayer" doit modifier aussi le nom stocké dans la sélectionneuse ou Playertwo. Ça ne va pas comment puis-je résoudre ce problème? S'il vous plaît résoudre, j'ai essayé de faire une variable de référence avec le symbole & symbole, mais je reçois une erreur de distinction de référence de référence n'est pas autorisée. XXX


6 commentaires

Celui qui a voté, c'était inapproprié. Ceci est une question bien écrite.


Je ne sais même pas comment dire à quel point votre code a tort. Est-ce même compilé?!?!?! Par exemple, vous utilisez comme paramètre une variable nommée playerturn qui n'a jamais été déclarée.


Dans ce cas, pourquoi n'avez-vous pas répondu à niveler le score?


@CatchMeifiera: J'écris ma réponse (ci-dessous) ... maintenant à l'avance.


Pour la question, je ne comprenais que le code que j'avais un problème avec.


@Renge dans mon expérience avec C, le problème est rarement entièrement contenu dans "le code que je posais un problème".


4 Réponses :


6
votes
  • Vous ne pouvez pas affecter des tableaux les uns aux autres (vous devez les copier élément par élément)
  • Lorsque vous avez passé des fonctions, des matrices décrivent les pointeurs, de sorte qu'un argument, charkerone de caractère [100] est identique à char * playerone
  • attribution d'un char * à un autre char * ne copie pas la chaîne, il copie le pointeur.

    la bonne façon de faire ceci: xxx

    est-ce: xxx

    ou, mieux encore, car cela est C ++ et non C, utiliser std :: chaîne au lieu de char . std :: string se comportera essentiellement comment vous attendez.


0 commentaires

1
votes

Vous copiez des pointeurs de tableau au lieu des valeurs d'entre eux.

lire un didacticiel sur des tableaux http://auugustcouncil.com/~tgibson/Tutorial /arr.html


0 commentaires

0
votes

en C / C ++ Le nom d'un tableau est en réalité un pointeur sur le premier élément de la matrice. Donc, par exemple xxx pré>

maintenant, lorsque vous passez un tableau dans une fonction comme celle-ci, vous effectuez une copie du pointeur, mais pas le tableau lui-même. P>

Donc, quand dans votre fonction, vous dites p> xxx pré>

Tout ce que vous faites est de rendre le pointeur CourantPlayer pointer sur le même emplacement de la mémoire que le pointeroneone de pointeur. P>

Pour obtenir ce que vous voulez, vous devez utiliser Strcpy P>

strcpy(currentPlayer,playerOne)


3 commentaires

Les tableaux ne sont pas des pointeurs, je ne vais pas descendre comme un malentendu courant, mais vous devriez examiner à la fois vos connaissances et votre réponse. Le nom du tableau est un identifiant qui fait référence à la matrice, la confusion provient du fait que les tableaux ont tendance à Decay dans les pointeurs dans la plupart des expressions et le fait que La langue permet la syntaxe de la matrice dans quelques endroits où elle est analysée comme syntaxe de pointeur (c'est-à-dire un paramètre de fonction int A [10] est analysé comme int * . Mais les tableaux sont Les matrices toujours dans la portée où elles sont définies et peuvent être utilisées comme telles dans des endroits où les pointeurs ne peuvent pas.


Un exemple serait Void FOO (int (& a) [3]); . Cette fonction prend un tableau de 3 intemples par référence. int main () {int gray [3]; int * p = tableau; foo (tableau); / * foo (p); * /} . tableau peut être transmis à foo comme il est un tableau de 3 entiers, p ne peut pas parce que c'est un pointeur à un entier (cela se trouve être initialisé au début d'un tableau de 3 entiers.


Dire que les tableaux sont des pointeurs est un moyen courant de les expliquer aux personnes qui peuvent être nouvelles à c parce que cela rend beaucoup de leur comportement "étrange" ait plus de sens. J'aurais probablement dû être plus clair que les matrices fonctionnent comme des pointeurs, mais ne sont pas exactement les mêmes. BTW, je ne suis pas sûr que j'ai jamais écrit de code comme dans votre exemple. Je savais que la taille de (tableau) était différente.



1
votes

Vous voulez courantePlayer code> pour être un Pointeur-de-caractères em> strong>, puis l'échange entre les deux joueurs:

Votre code, Edité: P>

void boardMarker(int&, char playerOne[], char playerTwo[], char &playerMarker, char** pCurrentPlayer);

int main()
{
    char playerOne[100];
    char playerTwo[100];
    char* currentPlayer = playerOne;

    boardMarker(playerTurn, playerOne, playerTwo, playerMarker, &currentPlayer);

}
void boardMarker(int &playerTurn, char playerOne[100], char playerTwo[100], char &playerMarker, char** pCurrentPlayer)
{
    // Set player markers
    //Player 1 uses X and Player 2 uses O
    if ( playerTurn == 1 )
    {
        playerMarker = 'X';
        *pCurrentPlayer = playerOne;
    }
    else
    {
        playerMarker = 'O';
        *pCurrentPlayer = playerTwo;
    }
}


1 commentaires

Cela donnera à l'effet qu'il veut, mais change la sémantique de son programme. CurrentPlayer est maintenant un alias à l'une des chaînes de noms de lecteur, plutôt que de détenir la valeur du nom du joueur actuel.