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而已了呢?望高人指点其中道理。 展开
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而已了呢?望高人指点其中道理。 展开
3个回答
展开全部
对啊,这里就是变量屏蔽,这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;}
希望对你有用!
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;}
希望对你有用!
展开全部
全局变量c3和Complex_add的第三个参数同名,当函数使用三个参数时,函数体内的c3表示的是该函数的第三个参数,会屏蔽全局变量c3。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个是传值与传址的区别。
初学很容易犯这样的错误。参见以前的贴。
初学很容易犯这样的错误。参见以前的贴。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询