在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不支持),这是functionCDivide
的目的。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;
}