结构表作为功能参数

时间:2013-11-08 10:31:41

标签: c pointers struct function-pointers

我在另一个文件的函数中修改了在我的main中创建的结构值的问题:

这是我的.h文件中的结构定义:

typedef struct Player Player;
struct Player
{
 char pseudo[30];
 char pawnOfPlayer;
 int numberPawn;
};

这是Player的表声明和我在main中调用的函数:

Player player[2];
whoPlays = initPlayerAttribution(&player[2], gamingMode);

这是我的崩溃出现的另一个C文件中函数定义的一部分:

int initPlayerAttribution(Player *tab1D[], int gamingMode)
{
    if(gamingMode == PLAYER_VS_AI)
    {
        strcpy(&(*tab1D[1]).pseudo, "AI");
        printf("Type the player1 name :\t");
        scanf("%s", (*tab1D[0]).pseudo);
    }
    else
    {
        printf("Type the player1 name :\t");
        scanf("%s", (*tab1D[0]).pseudo);
        printf("Type the player2 name :\t");
        scanf("%s", (*tab1D[1]).pseudo);
    }
    return 0;
}

当你有一个包含结构的表时,我仍然很难理解指针,你必须将它发送给一个函数:x

非常感谢!

2 个答案:

答案 0 :(得分:2)

您正在给出数组末尾的位置,请尝试输入:

whoPlays = initPlayerAttribution(player, gamingMode);

并将您的功能更改为:

int initPlayerAttribution(Player *tab1D, int gamingMode)
{
    ...
}

由于你将指针传递给你的数组,它会很好。它与正常的整数不同。

如果您这样做会发生什么:

whoPlays = initPlayerAttribution(&player[2], gamingMode);

为initPlayerAttribution提供一个数组,该数组指向数组后的某个内存地址。所以你实际上试图在initPlayerAttribution中访问的是播放器[2]和播放器[3]。

答案 1 :(得分:1)

Player player[2];
whoPlays = initPlayerAttribution(&player[2], gamingMode);

你跑出界限,数组是基础0 ---- ^

你的函数需要一个指针:

int initPlayerAttribution(Player *tab1D, int gamingMode)

int initPlayerAttribution(Player tab1D[], int gamingMode)

但不是Player *tab1D[],那是一个指向玩家

的指针数组

并且您不需要指定尺寸(数组衰减到函数中的指针):

whoPlays = initPlayerAttribution(player, gamingMode);