【问题标题】:reset a two dimensional array via function in c language windows通过c语言窗口中的函数重置二维数组
【发布时间】:2017-12-16 08:51:04
【问题描述】:

我想重置一个二维板,但我不确定如何返回指向数组的指针。 我也认为必须有一种更简单的方法来重置它但找不到。

char reset_board(int rows,int columns,char board[rows][columns])
{
    for(int i = 0;i<rows;i++)
    {
        for(int j=0;j<columns;j++)
        {
                board[i][j] == ' ';
        }
    }
    return &board[0][0];
}

【问题讨论】:

    标签: c arrays function pointers


    【解决方案1】:

    不必返回任何东西,您正在使用指向数组的指针(数组衰减为指针)。因此,您所做的任何更改都会反映在被调用方中。如果你很好奇,那么知道二维数组 char s[ROW][COL] 在传递给函数时会衰减为 char (*)[COL]

    void reset_board(int rows,int columns,char board[rows][columns])
    {
       ....   
    }
    

    这行得通。

    更简单的方法是使用memset

    memset(board,' ',sizeof board);
    

    memset (board, ' ', rows * columns * sizeof **board);
    

    但这仅在声明为char board[ROW][COL]的范围内有效。


    还有return &amp;board[0][0];,这是char的返回地址,所以它的类型是char*而不是char

    【讨论】:

    • memset (board, ' ', rows * columns * sizeof *board);
    • @DavidC.Rankin.:检查一次..已编辑。感谢您的建议和光临。
    • 是的,但是如果它是 charintdouble 任何 :) 类型,则离开 sizeof *board 有效
    • @DavidC.Rankin 尝试打印rows * columns * sizeof *board 的值。这不是你想的那样。
    • @user3386109.: 没关系...我更正并正在检查**board
    猜你喜欢
    • 2012-12-16
    • 1970-01-01
    • 2013-05-15
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多