将二维布尔值传递给函数

时间:2018-09-05 05:22:39

标签: c++ pointers boolean

为什么不能像这样将布尔“ mat”的2维地址传递给函数?

void generate(bool arr) {
    ......;
    ......;
}

int main() {
    bool mat[3][3];
    generate(mat);
    return 0;
}

1 个答案:

答案 0 :(得分:0)

尝试以下示例 然后注意以下说明:

const int N = 3;

void generate(bool arr[][N]) {
    for(int i = 0; i < N; i++)
    {
        for(int j = 0; j < N; j++)
        {
            std::cout << std::boolalpha << arr[i][j] << " ";
        }
        std::cout << std::endl;
    }
}

int main() {
    // initialize array
    bool mat[N][N] = { {1, 0, 1},
                     {0, 1, 0},
                     {1, 0, 1} };
    generate(mat);
    return 0;
}

输出:

true false true
false true false
true false true

注意: 有3种方法可以完全按照(this answer)将2维数组传递给函数:

  1. 功能参数是一个2-d数组:

    bool arr[10][10];
    void Func(bool a[][10])
    {
        // ...
    }
    Func(arr);
    
  2. 函数参数是一个指针数组:

    bool *arr[10];
    for(int i = 0;i < 10;i++)
        arr[i] = new bool[10];
    void Func(bool *a[10])
    {
        // ...
    }
    Func(arr);
    
  3. 函数参数从pointerpointer

    bool **arr;
    arr = new bool *[10];
    for(int i = 0;i < 10;i++)
        arr[i] = new bool[10];
    void Func(bool **a)
    {
        // ...
    }
    Func(arr);