对啊,这里就是变量屏蔽,这Complex c1={1.2,1.5}, c2={1.0,2.0},c3;,你定义了全局变量c3,这Complex Complex_add(Complex c1,Complex c2,Complex c3)你定义了形参c3,在Complex Complex_add中,形参屏蔽了全局变量而起作用,且形参c3仅在Complex Complex_add中起作用,出了这个函数就是全局变量了,如这printf("c3.real=%f\n",c3.real);
printf("c3.imaginary=%f\n",c3.imaginary);
不妨试试下面的程序,就会明白了:
#include
#include
typedef struct {
double real, imaginary;
} Complex;
Complex c1={1.2,1.5}, c2={1.0,2.0},c3;
/*Complex Complex_add(Complex c1,Complex c2)*/
Complex Complex_add(Complex c1,Complex c2,Complex c3)
{
c3.real=c1.real+c2.real;
c3.imaginary=c1.imaginary+c2.imaginary;
printf("c3.real=%f\n",c3.real);
printf("c3.imaginary=%f\n",c3.imaginary);/*这里输出形参c3,就不是0了*/
return c3;
}
main()
{
/*Complex_add(c1,c2);*/
Complex_add(c1,c2,c3);
printf("c3.real=%f\n",c3.real);
printf("c3.imaginary=%f\n",c3.imaginary);
return 0;}
希望对你有用!
全局变量c3和Complex_add的第三个参数同名,当函数使用三个参数时,函数体内的c3表示的是该函数的第三个参数,会屏蔽全局变量c3。
这个是传值与传址的区别。
初学很容易犯这样的错误。参见以前的贴。