在函数中传递char数组?

时间:2010-07-30 02:25:11

标签: c++ arrays char

这是我有问题的编码: 我必须接受2名球员的名字。然后,当播放器标记改变时,对于下一部分,存储在“currentPlayer”中的名称也应该改变存储在playerOne或playerTwo中的名称。它不是这样我该如何解决?请解决,我试着用&作为参考变量。符号,但我得到一个错误,说不允许引用数组。

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

int main()

{
    char playerOne[100];
    char playerTwo[100];
    char currentPlayer[100] = "playername";

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

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

4 个答案:

答案 0 :(得分:5)

  • 您不能将数组彼此分配(您必须逐个元素地复制它们)
  • 传递给函数时,数组会衰减为指针,因此作为参数,char playerOne[100]char* playerOne相同
  • char*分配给另一个char*不会复制字符串,而是复制指针。

正确的方法:

currentPlayer = playerOne;

就是这样:

strcpy(currentPlayer, playerOne);

或者,更好的是,因为这是C ++而不是C,所以使用std::string而不是char数组。 std::string的行为基本上与您的期望相符。

答案 1 :(得分:1)

您正在复制数组指针而不是其中的值。

阅读有关数组http://augustcouncil.com/~tgibson/tutorial/arr.html

的C教程

答案 2 :(得分:1)

您希望currentPlayer成为 指向字符的指针 ,然后在两个玩家之间进行交换:

您的代码,已编辑:

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;
    }
}

对您的代码的一些评论:

  • 变量playerTurnplayerMarker不是 声明。 (我假装他们是 全局变量,此处未显示)。
  • 你不应该留下参数 未命名的,如悬空int& 在boardMarker的原型中。
  • 正如所写,playerOne和playerTwo 没有初始化。我们假装 他们在别处初始化。

答案 3 :(得分:0)

在C / C ++中,数组的名称实际上是指向数组第一个元素的指针。例如,

*currentPlayer == 'p'

现在,当您将数组传递给类似的函数时,您正在复制指针,而不是数组本身。

所以在你的功能中你说

currentPlayer = playerOne

你所做的只是让指针currentPlayer指向与指针playerOne相同的内存位置。

要获得所需内容,您需要使用strcpy

strcpy(currentPlayer,playerOne)