C语言函数调用传结构体疑问

#include<string.h>typedefstruct{doublereal,imaginary;}Complex;Complexc1={1.2,1.5},c2=... #include <string.h>

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;
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;
}
以上函数调用传两个参数时(用//屏蔽的语句),能打印出正确的结果,但是调用函数传三个参数时,为什么打印结果全都只是0而已了呢?望高人指点其中道理。
展开
 我来答
蓦晴蓦晴5A
2009-06-14 · 超过36用户采纳过TA的回答
知道小有建树答主
回答量:86
采纳率:0%
帮助的人:100万
展开全部
对啊,这里就是变量屏蔽,这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 <string.h>
#include <stdio.h>
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;}
希望对你有用!
梦想窗外
2009-06-14 · TA获得超过1588个赞
知道大有可为答主
回答量:1180
采纳率:0%
帮助的人:1563万
展开全部
全局变量c3和Complex_add的第三个参数同名,当函数使用三个参数时,函数体内的c3表示的是该函数的第三个参数,会屏蔽全局变量c3。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d050c1b
2009-06-14 · TA获得超过933个赞
知道小有建树答主
回答量:1083
采纳率:50%
帮助的人:1027万
展开全部
这个是传值与传址的区别。
初学很容易犯这样的错误。参见以前的贴。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式