c - 如何将函数中的指针位置相乘?
问题描述
我正在尝试创建一些函数来处理向量和矩阵运算。向量和函数按预期工作,但点积函数始终返回零。我做错了什么?
另外,我不确定这是否是解决问题的最佳方法。我正在为非线性优化创建一个脚本。我的想法是为每次迭代中重复使用的辅助标量、向量和矩阵分配内存。这些函数是 void 类型,因此我可以跟踪程序中创建的所有变量。
#include <stdio.h>
void dot (const double *v_1, const double *v_2, double s_out)
{
s_out = v_1[0] * v_2[0] + v_1[1] * v_2[1];
}
void sum (double *v_1, double *v_2, double *v_out)
{
v_out[0] = v_1[0] + v_2[0];
v_out[1] = v_1[1] + v_2[1];
}
int main ()
{
double *r;
double *t;
r = malloc(sizeof(double)*2);
t = malloc(sizeof(double)*2);
r[0] = 1; r[1] = 2;
double rho_new = 0;
dot (r, r, rho_new);
printf("rho_new = %lf\n", rho_new);
sum (r, r, t);
printf("t = %lf %lf\n", t[0], t[1]);
}
解决方案
从函数返回值的两个选项。
#include <stdio.h>
double dot (const double *v_1, const double *v_2)
{
return v_1[0] * v_2[0] + v_1[1] * v_2[1];
}
void sum (double *v_1, double *v_2, double *v_out)
{
v_out[0] = v_1[0] + v_2[0];
v_out[1] = v_1[1] + v_2[1];
}
int main ()
{
double *r;
double *t;
r = malloc(sizeof(double)*2);
t = malloc(sizeof(double)*2);
r[0] = 1; r[1] = 2;
double rho_new = 0;
rho_new = dot(r, r, rho_new);
printf("rho_new = %lf\n", rho_new);
sum (r, r, t);
printf("t = %lf %lf\n", t[0], t[1]);
}
#include <stdio.h>
void dot (const double *v_1, const double *v_2, double *s_out)
{
*s_out = v_1[0] * v_2[0] + v_1[1] * v_2[1];
}
void sum (double *v_1, double *v_2, double *v_out)
{
v_out[0] = v_1[0] + v_2[0];
v_out[1] = v_1[1] + v_2[1];
}
int main ()
{
double *r;
double *t;
r = malloc(sizeof(double)*2);
t = malloc(sizeof(double)*2);
r[0] = 1; r[1] = 2;
double rho_new = 0;
dot (r, r, &rho_new);
printf("rho_new = %lf\n", rho_new);
sum (r, r, t);
printf("t = %lf %lf\n", t[0], t[1]);
}
推荐阅读
- struct - 如何最好地处理可以更改类型的结构字段
- r - 如何使用 Shiny 一键生成多个报告
- java - Java - 如何从句子的 ArrayList 中获取每个单词
- c - 更改已在 C 中创建的 TypeDef 对象的值
- animation - 从方法开始 SlideTransition 的动画
- python-3.x - 如何将 1 个系列的唯一值作为列并计算每季度系列中唯一值的每次出现?
- c# - C#/Linq - 按字符串数组中返回的第二项分组,同时保留父项
- c# - 字段为空的实体代码第一个问题
- reactjs - 运行 truffle unbox 后反应出现错误
- python - 我制作了列表的副本,但是当我对副本进行更改时,原始列表仍然会更改。我不明白为什么