更新c中的本地向量条目

时间:2017-08-15 08:17:57

标签: c pointers mpi

int *my_vector通过MPI_Rec从主进程收到三个值。现在我想从所有值中减去第一个值并存储.eg

my_vector = { 4,8,12}

从所有中减去第一个元素ie.4后,我需要将这些值{0 4 8}更新/存储在my_vector中。

使用以下代码

for (i=0;i<=2;i++)
{
    my_vector[i]=my_vector[i]-my_vector[0];
}

上面的代码减去第一个元素但不减去其他元素并给出{0 8 12}而不是{0,4,8}。 提前致谢

3 个答案:

答案 0 :(得分:2)

这是因为my_vector[0]在第一次迭代后获得值0

在循环之前获取my_vector [0]的副本:

tmp = my_vector[0];
for (i=0;i<=2;i++)
{
    my_vector[i]=my_vector[i]-tmp;
}

另一个解决方案是从索引1开始循环并在循环之后更改索引0

for (i=1;i<=2;i++)
{
    my_vector[i]=my_vector[i]-my_vector[0];
}
my_vector[0] = 0;

答案 1 :(得分:2)

虽然可能首选使用临时变量的“正常”前向循环,但也可以选择向后循环:

for (i = 2; i >= 0; --i)
{
    my_vector[i] -= my_vector[0];
}

答案 2 :(得分:1)

当然,因为这段代码

for (i=0;i<=2;i++)
{
    my_vector[i]=my_vector[i]-my_vector[0];
}

在第一次迭代时将my_vector[0]设置为零。

您必须将my_vector[0]存储在局部变量中才能执行偏移。

int offset=my_vector[0];
for (i=0;i<=2;i++)
{
    my_vector[i] -= offset;
}