在ANSIC程序中,如何将数组的元素作为参数传递给函数,以便对其进行修改?

在ANSIC程序中,如何将数组的元素作为参数传递给函数,以便对其进行修改?,c,C,我了解如何将数组传递给函数,并让该函数更新数组的值。我很难理解如何将数组的元素传递给函数,并让函数更新该元素。我的猜测如下,但从gcc生成以下内容:“警告:'CDivide'的冲突类型” main()函数定义有问题的数组,并将它们作为fn\u v1p0的complex\u real和complex\u imag传递给fn\u v1p0函数定义中的指针。main()包含这些函数的原型,如下所示 void fn_v1p0(double *, double *, char *, double *, u

我了解如何将数组传递给函数,并让该函数更新数组的值。我很难理解如何将数组的元素传递给函数,并让函数更新该元素。我的猜测如下,但从
gcc生成以下内容:“警告:'CDivide'的冲突类型”

main()
函数定义有问题的数组,并将它们作为
fn\u v1p0
complex\u real
complex\u imag
传递给
fn\u v1p0
函数定义中的指针。
main()
包含这些函数的原型,如下所示

void fn_v1p0(double *, double *, char *, double *, unsigned int, double *);
void CDivide(double *, double *, double, double, double, double);
但是,
main()
位于一个文件中,其他两个函数位于不同的文件中。只有主文件包含这些原型

我需要执行复数除法(ANSI C不支持),这是function
CDivide
的目的。
fn\u v1p0
函数还有更多内容,但我将其简化为仅显示此问题所需的内容

我把complex\u real[ii]当作一个简单的双值,希望如果我在前面加一个&的话,
CDivide
就可以如图所示编写。但我的猜测是行不通的。不确定解决这个问题的最佳方法是什么

void fn_v1p0(
    double *complex_real, double *complex_imag, 
    char *selected_form,    
    double *freq,          
    unsigned int len_freq, 
    double *Hparams)
{
    int ii = 0;
    double a0, b0;

    for (ii = 0; ii <= len_freq; ii++) {
       CDivide( &complex_real[ii], &complex_imag[ii], b0, 0, a0, freq[ii] );
    } 
}

取两个函数双CDivide_real(a,b,c,d)和CDivide_imag(a,b,c,d),或将双指针数组传递给类似CDivide的CDivide(double*x[2],a,b,c,d),然后

for (ii = 0; ii <= len_freq; ii++) {
   double *a[]={&complex_real[ii],&complex_imag[ii]};
   CDivide( a, b0, 0, a0, freq[ii] );
} 

问题是CDivide函数的原型需要驻留在包含CDivide和fn_v1p0定义的文件中,而不是包含main()函数的文件中。将CDivide的原型移动到包含CDivide的文件将清除错误。感谢Adam Rosenfield用他在上述问题中的评论解决了这个问题。

fn_v1p0
的定义之前,您是否有
CDivide
的函数原型?好问题Adam。我编辑上面的问题就是为了解决这个问题。我想我们的编辑错了,你可能想看看我的修订版,因为我还修复了很多其他地方。你可以点击9分钟前编辑的
链接。您将能够看到所有的修订。如果您更喜欢我的修订版,可以将其回滚。警告消息指向哪行代码?该消息通常表示函数原型和函数定义之间不匹配。您是否可以再次检查原型和定义是否正确?警告还应指向包含第一个声明的代码行,该行说明了什么?
for (ii = 0; ii <= len_freq; ii++) {
   double *a[]={&complex_real[ii],&complex_imag[ii]};
   CDivide( a, b0, 0, a0, freq[ii] );
} 
void CDivide( 
    double *x[2], double a, double b, double c, double d) 
{
    double divisor = c*c + d*d; 
    *x[0] = (a*c + b*d) / divisor; 
    *x[1] = (b*c - a*d) / divisor; 
}