c - C 中使用引用传递的矩阵加法

标签 c

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

最佳答案

假设我们定义了 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/

相关文章:

c - 嵌套函数视觉表示 ("flowcharts")

c - 二维数组作为函数参数

const char** 与 const char* 突变

C - 看门狗定时器未启动或调用回调函数

c - giflib 用于编辑动画 gif 的用法

c - 尽管满足条件,但不输入 if 条件

c - 为什么调用 lseek 后读取的文件总是返回 0?

c - 这段代码实际上是如何工作的?

CUDA程序返回随机结果

c - 在非结构或 union 中请求成员 'nama'