对二维数组 c++ 的引用

Reference to two dimensional arrays c++

提问人:Wiktoria 提问时间:12/17/2022 更新时间:12/17/2022 访问量:62

问:

在我的项目中,我选择使用数组(不是动态的)。我想知道如何与一个函数中另一个函数中的二维数组相关联。

我是否必须在 main 函数中创建一个数组并引用(然后在其他函数中修改)还是以其他方式进行?如果是,那么我真的很感激有人向我展示,我一直在以多种方式进行搜索和尝试,但我仍然有错误。 祝你有美好的一天, Wiktoria

C++ 数组 函数 按引用传递

评论

2赞 Retired Ninja 12/17/2022
如果数组是局部变量,则一旦该函数结束,它将被销毁。如果所有其他函数都是从定义它的函数内部调用的,这可能是可以的,但如果不是,则需要在其他地方定义数组,以便它具有更长的生存期。如果你能展示一些代码来演示你要做什么,那将是最好的。
4赞 Remy Lebeau 12/17/2022
如果您编辑您的帖子以显示您尝试过的不适合您的代码,那将会很有帮助。考虑使用原始 C 样式数组来代替原始数组。 更容易使用 - 它更容易声明指针/引用,它可以分配给其他 S,它可以从函数中编辑,等等。std::arraystd::arraystd::arrayreturn

答:

0赞 A M 12/17/2022 #1

有一种特殊的语法可以将 C 样式数组传递给函数。

请看下面的代码

constexpr size_t NumberOfRows = 3;
constexpr size_t NumberOfColumns = 4;

// Typedef for easier usage
using IntMatrix2d = int[NumberOfRows][NumberOfColumns];

//Solution 1 ------
// Pass by reference
void function1(int(&matrix)[NumberOfRows][NumberOfColumns])  {}

// Pass by pointer
void function2(int(*m)[NumberOfRows][NumberOfColumns])  {}

//Solution 2 ------
// Pass by reference
void function3(IntMatrix2d& matrix) {}

// Pass by pointer 
void function4(IntMatrix2d* matrix) {}


int main()
{
    // Solution 1
    // Handwritten matrix. Dimension is compile time constant
    int matrix1[NumberOfRows][NumberOfColumns];

    // Pass by reference
    function1(matrix1);

    // Pass by pointer
    function2(&matrix1);

    // Solution 2 -----
    IntMatrix2d matrix2;

    // Pass by reference
    function3(matrix2);

    // Pass by pointer
    function4(&matrix2);

    return 0;
}

但基本上你应该改用-std::array