如何使用c中的参数声明数组大小

时间:2015-05-06 17:20:57

标签: c arrays function parameters

我在c中写了一个函数,这是我的代码:

char* makeMoves(char oldBoard[], int moveType, int empties, char player){
    int oldBoardLength;
    oldBoardLength = sizeof(oldBoard) / sizeof(oldBoard[0]);
    char result[oldBoardLength];
    copyBoard(oldBoard, result);
}

我认为这一行存在问题:

char result[oldBoardLength];

如何使用length = oldBoardLength创建此数组? 在java中是这样的:

char[] result = new char[oldBoard.length];

但是我不知道如何创建它。任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

在C中,您必须在这种情况下分配动态存储。

setupHelloWorldTextView(TextView helloWorldTextView);

但是,您必须将oldBoardLength传递给函数,因为char *result = malloc(oldBoardLength); copyBoard(oldBoard, result); free(result); arr[]之类的参数将始终衰减为指针。在指针上取arr[8]不是你想要的。看看这个例子的输出:

sizeof

答案 1 :(得分:0)

首先我会使用char *oldBoard代替char oldBoard[]但我认为char *oldBoard更清晰。其次,你不要使用sizeof,因为它不会返回正确的长度,你只需要获得指针的大小。 sizeof(oldBoard) / sizeof(oldBoard[0]);仅适用于静态分配的数组,或者至少就是How do I find the length/number of items present for an array?。使用另一个变量来跟踪数组长度。最后使用动态分配aka malloc(),以便在函数之间传递值时,这些值不会变为垃圾。我不太确定你要做什么,但这里有一个我认为你想做的事情的例子。

char *makeMoves(char *oldBoard, int len, int moveType, int empties, char player)
{
    char *result;

    result = malloc(len);
    if(result == NULL)
    {
        return NULL;
    }

    copyBoard(oldBoard, result);

    return result;
}

int main(void)
{

    char *board, *result;
    int len = 10;
    int moveType, empties;
    char player;

    board = malloc(len);
    if(board == NULL)
    {
        return -1;
    }

    result = makeMoves(board, len, moveType, empties, player);
    if(result == NULL)
    {
        return -1;
    }

    free(board);
    free(result);

    return 0;
}

答案 2 :(得分:0)

在C中,最常用的习惯用法是将指针参数指向的预期元素数作为单独的参数传递。应该是这样的:

char* makeMoves(char *oldBoard, int oldBoardLength, int moveType, int empties, char player) {
    /* ... */
}

这样,你的函数的调用者可以传递正确的长度。