[英]how to pass element of array as argument to function for it to modify, in ANSI C program?
我了解如何將數組傳遞給函數,並讓該函數更新數組的值。 我很難理解如何將數組的ELEMENT傳遞給函數並讓該函數更新該元素。 我的猜測如下,但是從gcc: "warning: conflicting types for 'CDivide'"
產生了以下內容gcc: "warning: conflicting types for 'CDivide'"
。
main()
函數定義有問題的數組,並將它們(作為參考)作為complex_real
和complex_imag
傳遞給fn_v1p0
,在函數fn_v1p0
的函數定義fn_v1p0
它們聲明為指針。 main()
包括這些函數的原型,如下所示。
void fn_v1p0(double *, double *, char *, double *, unsigned int, double *);
void CDivide(double *, double *, double, double, double, double);
但是, main()
位於一個文件中,而其他兩個函數位於另一個文件中。 只有主文件包含這些原型。
我需要執行復雜的除法(ANSI C中不支持),這是功能CDivide
的目的。 fn_v1p0
功能還有更多,但我將其簡化為僅顯示此問題所需的內容。
我已經將complex_real[ii]
視為簡單的雙CDivide
值,希望如果在其前面加上&,則可以如圖所示編寫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] );
}
}
哪里
void CDivide(
double *z_real, double *z_imag, double a, double b, double c, double d)
{
double divisor = c*c + d*d;
*z_real = (a*c + b*d) / divisor;
*z_imag = (b*c - a*d) / divisor;
}
問題在於CDivide函數的原型需要駐留在包含CDivide和fn_v1p0定義的文件中,而不是駐留在包含main()函數的文件中。 將CDivide的原型移至包含CDivide的文件可清除該錯誤。 感謝亞當·羅森菲爾德(Adam Rosenfield)用上面問題中的評論消除了這個問題。
取2個函數對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中
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.