c++ - 在 C++ 中使用函数操作多维数组

标签 c++ multidimensional-array matrix pass-by-reference linear-algebra

我正在尝试使用函数修改 C++ 中二维数组的内容。我一直无法找到有关如何通过引用将二维数组传递给函数然后操作单个单元格的信息。

我试图解决的问题具有以下格式。为了简洁起见,我做了一个简单的程序。

#include<cstdlib>
#include<iostream>
using namespace std;

void func(int& mat) {
    int k,l;
    for(k=0;k<=2;k++) {
    for(l=0;l<=2;l++) {
    mat[k][l]=1;  //This is incorrect because mat is just a reference, but
                  // this is the kind of operation I want. 
    }
}

return; 
}

int main() {
int A[3][3];
int i, j;
char jnk;

for(i=0;i<=2;i++) {
    for(j=0;j<=2;j++) {
        A[i][j]=0;
    }
}

    func(A);

cout << A[0][0];
    return 0;
}

所以 A[0][0] 的值应该从 0 变为 1。正确的做法是什么?非常感谢...

最佳答案

数组不是按值传递的,所以你可以简单地使用

void func(int mat[][3])

并且,如果您在 func 中修改 mat 的值,您实际上是在 main 中修改它。

如果您事先知道矩阵的大小,则可以使用该方法,否则请考虑使用指针:

#include <iostream>

void f(int **m, int r, int c) {
    m[0][0]=1;
}

int main () {

    int **m;
    int r=10,c=10;
    int i;

    m = (int**)malloc(r*sizeof(int*));

    for (i=0; i<r;i++)
        m[i] = (int*)malloc(c*sizeof(int));

    f(m,r,c);

    printf("%d\n",m[0][0]);

    for(i=0;i<r;i++)
        free(m[i]);

    free(m);

    return 0;

}

关于c++ - 在 C++ 中使用函数操作多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9672731/

相关文章:

java - 矩阵运算(转置)

c# - Microsoft Solver Foundation 中的决策矩阵

c++ - 多重间接的限制

c++ - C/C++标准库中的缓冲

java - 如何从多行字符串中获取二维数组?

c - 使用指针对二维数组中一行中的元素进行排序

r - 如何自定义外部函数和矢量化函数?

c++ - URLDownloadToFile API,如何异步使用?

java - 无法运行程序 "\ndk-build.cmd": Launching failed

javascript - 从二维数组中获取列