我目前的作业有问题,要求我们创建一个程序,使用引用传递来解决矩阵问题,但我只是不明白它是如何完成的。 有人可以向我展示一个使用引用传递来解决矩阵加法的简单代码吗? 谢谢..
最佳答案
假设我们定义了 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 中不存在引用复制之类的东西。一切都是按值传递。 what happens during pass by reference in C?
关于c - C 中使用引用传递的矩阵加法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13494445/