簡體   English   中英

通過C中的void函數返回動態數組

[英]Returning dynamic array through void function in C

在我的C程序中,我使用帶有以下參數的void函數:一個2D int數組,一個用於創建新動態數組的int指針和一個最后一個int指針,它將包含將在功能。 所以使用malloc在函數中創建動態數組,一切正常,直到我在調用函數后在main()中打印它的元素。 我得到的是垃圾而不是我應該看到的數字。 這是功能代碼:

void availableMoves(int array[][3], int *av, int *counter)
{
    int i, j;
    for (i=0; i<3; i++)
    {
        for (j=0; j<3; j++)
        {
            if (array[i][j] == E)
            {
                printf("%d ", 3*i + j + 1);
                (*counter)++;
            }
        }
    }
    av = (int *) malloc(*counter * sizeof(int));
    if (av == NULL)
    {
        printf("ERROR!");
    }
    else
    {
        for (i=0; i<*counter; i++)
            *(av + i) = 0;
        int pos = 0;
        for (i=0; i<3; i++)
        {
            for (j=0; j<3; j++)
            {
                if (array[i][j] == E)
                {
                    *(av + pos++) = 3*i + j + 1;
                }
            }
        }
    }
}

對動態數組使用雙指針int **av而不是int *av

void availableMoves(int array[][3], int **av, int *counter)

進入功能改變av *av

在此函數中, av是通過副本傳遞的指針。 因此,當您在函數內更改指針的值時,不會修改原始指針。

有兩種可能性:

  • 使用指向指針的指針( int **av );
  • 返回分配的指針( return av )。

所以要么:

void availableMoves(int array[][3], int **av, int *counter);

要么:

int *availableMoves(int array[][3], int *av, int *counter)

電話:

availableMoves(array, &av, &counter);
av = availableMoves(array, av, &counter);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM