-2

我目前的作业有问题,要求我们创建一个使用传递引用解决矩阵问题的程序,我只是不明白它是如何完成的。有人可以向我展示一个使用传递引用解决矩阵加法的简单代码。谢谢..

4

1 回答 1

1

假设我们定义了 mat4_t 类型和 mat4_add 函数。

typedef ... mat4_t;

使用“复制”方法将如下所示:

mat4_t mat4_add(mat4_t m1, mat4_t m2);
mat4_t m1, m2, m3;
m3 = mat4_add(m1, m2);

函数 mat4_add 接受 2 个参数并返回新矩阵(通过副本)。

使用“通过引用”它将是:

void mat4_add(mat4_t *sum, const mat4_t *m1, const mat4_t *m2);
mat4_t m1, m2, m3;
mat4_add(&m3, &m1, &m2);

函数接收指向源矩阵 (m1, m2) 的指针和指向应该存储矩阵总和的内存的指针。


第一种方法: m1 和 m2 都被复制到函数堆栈,因此堆栈增长 2*sizeof(mat4_t) 并且矩阵数据被复制。之后,函数栈又增长了一个 sizeof(mat4_t) 来存储计算结果。当从函数返回值分配值时,该结果将使用 return 语句再次复制。

另一方面,对于“通过引用”的指针,无需应对。这种方法更快(不需要副本)并且内存效率更高。

此外,在 C 中没有像引用复制这样的东西。一切都是按值传递的。 在 C 中通过引用传递时会发生什么?

于 2012-11-21T13:40:38.030 回答