【问题标题】:Function does not update value of variable函数不更新变量的值
【发布时间】:2020-09-19 18:50:14
【问题描述】:

我正在尝试编写一个程序,将两个不同的复数 (b*c) 相乘,将结果存储在 a 中并打印出结果。为了简单起见,我只决定使用 10 个数字,并将 b 和 c 的所有虚数和实数设置为数字 0 到 9。

首先,我创建包含复数 a、b 和 c 的实部和虚部的数组。接下来我声明 a 的实部和虚部为零,因为我还不知道这些。为了找到这些,我有一个名为 multiply 的函数,它计算 a 的实部和虚部。

最后,在我的主要方法中,我循环遍历所有数组,生成值 0-9,使用乘法填充包含 a 的实部和虚部值的 a(as_reas_im)的数组,然后简单地打印所有这些条目。

但是我每次迭代只得到:The product is 0 + 0i。这意味着我的乘法函数不会更新a_rea_im 的值。谁能帮我理解为什么?

我的代码如下:

#include <stdio.h>
#include <stdlib.h>

void multiply(int c_re, int c_im, int a_re, int a_im, int b_re, int b_im);

int as_re[10];
int as_im[10];
int bs_re[10];
int bs_im[10];
int cs_re[10];
int cs_im[10];

int a_re = 0;
int a_im = 0;

int main(){

   for (int i = 0; i < 10; i++){

      bs_re[i] = i;
      bs_im[i] = i;
      cs_re[i] = i;
      cs_re[i] = i;

      multiply(cs_re[i], cs_im[i], as_re[i], as_im[i], bs_re[i], bs_im[i]);

      as_re[i] = a_re;
      as_im[i] = a_im;

      printf("The product is %d + %di\n", as_re[i], as_im[i]);
   }

}

void multiply(int c_re, int c_im, int a_re, int a_im, int b_re, int b_im){

   a_re = c_re * b_re - c_im * b_im;
   a_im = c_re * b_im + c_im * b_re;

}

【问题讨论】:

    标签: c


    【解决方案1】:

    您不需要将全局变量作为参数传递。如果你声明一个与全局变量同名的参数或局部变量,那么它将隐藏该函数中的全局变量。

    删除了作为函数参数包含的全局变量。

    #include <stdio.h>
    #include <stdlib.h>
    
    void multiply(int c_re, int c_im, int b_re, int b_im);
    
    int as_re[10];
    int as_im[10];
    int bs_re[10];
    int bs_im[10];
    int cs_re[10];
    int cs_im[10];
    
    int a_re = 0;
    int a_im = 0;
    
    int main(){
    
       for (int i = 0; i < 10; i++){
    
          bs_re[i] = i;
          bs_im[i] = i;
          cs_re[i] = i;
          cs_re[i] = i;
    
          multiply(cs_re[i], cs_im[i], bs_re[i], bs_im[i]);
    
          as_re[i] = a_re;
          as_im[i] = a_im;
    
          printf("The product is %d + %di\n", as_re[i], as_im[i]);
       }
    
    }
    
    void multiply(int c_re, int c_im, int b_re, int b_im){
    
       a_re = c_re * b_re - c_im * b_im;
       a_im = c_re * b_im + c_im * b_re;
    
    }
    

    【讨论】:

    • 好吧,我对此进行了简化,但从技术上讲,乘法函数必须具有签名 void multiply(double *c_re, double *c_im, double *a_re, double *a_im, double *b_re, double *b_im);但即使我使用指针,我也无法让它工作。所以你的代码可以工作,但签名不正确。
    猜你喜欢
    • 2023-02-09
    • 1970-01-01
    • 2022-11-21
    • 2021-09-22
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2021-04-03
    相关资源
    最近更新 更多