【问题标题】:Passing a 2-D Boolean to a function [duplicate]将二维布尔值传递给函数[重复]
【发布时间】:2019-02-10 03:41:52
【问题描述】:

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

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

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

【问题讨论】:

  • 这不是布尔值。但是一个二维布尔数组。
  • 是的,我不确定代码,但问题标题和描述似乎询问将二维数组传递给函数,所以我认为这应该有望回答 OP 的问题,无论他们的代码如何
  • @user4581301,“mat[3]mat[3]”是一个错字。我修好了。

标签: c++ pointers boolean


【解决方案1】:

试试下面的例子 然后注意下面的描述:

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) 将二维数组传递给函数: p>

  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);
    

【讨论】:

    猜你喜欢
    • 2017-02-20
    • 2013-05-12
    • 2013-01-18
    • 2021-07-15
    • 2013-03-28
    • 1970-01-01
    • 2018-09-11
    • 1970-01-01
    • 2013-09-04
    相关资源
    最近更新 更多