首页 > 解决方案 > 如何将函数中的指针位置相乘?

问题描述

我正在尝试创建一些函数来处理向量和矩阵运算。向量和函数按预期工作,但点积函数始终返回零。我做错了什么?

另外,我不确定这是否是解决问题的最佳方法。我正在为非线性优化创建一个脚本。我的想法是为每次迭代中重复使用的辅助标量、向量和矩阵分配内存。这些函数是 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]);
}

标签: cfunctionpointersvectormultiplication

解决方案


从函数返回值的两个选项。

#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]);
}

推荐阅读