我尝试将结构指针传递给函数时出现问题

时间:2010-11-09 00:59:02

标签: c pointers struct

这段代码有什么问题?

typedef struct jogador{
    char nome[7];
    int pecas[6][2];
}Jogador;

void distribuir_pecas( Jogador* jogadores );

int main()
{
    Jogador* jogadores;
    jogadores = (Jogador*) malloc( 4 * sizeof(Jogador));
    distribuir_pecas( jogadores );
    return 0;
}
void distribuir_pecas( Jogador* jogadores ){
    int domino[28][2];
    int vetor_aux[28];

    int i, j;
    int peca_sorteada;
    int num_jogador = 0;
    int num_domino = 0;
    srand(time(NULL));

    for( i = 0; i < 28; i++){
        vetor_aux[i] = 1;
    }
    for( i = 0 ; i < 7; i++){
        for( j = 0; j < 7; j++){
            if( j == 0 ){
                j = i;
            }
            domino[num_domino][0] = i;
            domino[num_domino][1] = j;
            //printf("%d*%d\n", domino[num_domino][0], domino[num_domino][1]);
            num_domino++;
        }
    }

    while( num_jogador < 4 ){
        for( i = 0; i < 6; ){
            peca_sorteada = rand()%28;
            if( vetor_aux[peca_sorteada] ){

                vetor_aux[peca_sorteada] = 0;
                jogadores[num_jogador].pecas[i][0] = domino[peca_sorteada][0];
                jogadores[num_jogador].pecas[i][1] = domino[peca_sorteada][1];
                i++;
                printf("[%d|%d]\n",jogadores[num_jogador].pecas[i]                        [0],jogadores[num_jogador].pecas[i][1]);
            }
        }
        printf("\n\n");
        num_jogador++;
    }
}

当我尝试将domino[peca_sorteada][0]等同于jogadores[num_jogador].pecas[i][0]时,例如,使用->操作数时出现编译错误,但使用.操作数时,printf不打印正确的价值。为什么????

1 个答案:

答案 0 :(得分:3)

不确定这是否是潜在问题,但是:

int domino[28][2];
....
for( i = 0 ; i < 7; i++){
    for( j = 0; j < 7; j++){
        if( j == 0 ){
            j = i;
        }
        domino[num_domino][0] = i;
        domino[num_domino][1] = j;
        //printf("%d*%d\n", domino[num_domino][0], domino[num_domino][1]);
        num_domino++;
    }
}

会给你带来麻烦。在此双循环结束时,num_domino将为49,但domino数组的长度仅为28个元素。