c语言程序怎么理解?
#include<stdio.h>intaddc(inta,intb,intc){c=a+b;return(c);}main(){intx=4,y=2,z,r;z=x+y...
#include <stdio.h>
int addc(int a,int b,int c)
{c=a+b;
return(c);}
main()
{int x=4,y=2,z,r;
z=x+y;
r=addc(addc(x,y,z),addc(y,z,x),z);
printf("%d/n",r);
}
这个程序怎么理解? 展开
int addc(int a,int b,int c)
{c=a+b;
return(c);}
main()
{int x=4,y=2,z,r;
z=x+y;
r=addc(addc(x,y,z),addc(y,z,x),z);
printf("%d/n",r);
}
这个程序怎么理解? 展开
10个回答
展开全部
你只要弄明白指针的用法就可以了(建议看看《C与指针》)。我解释一下:
fun(a,b,s);传入数组a,b的地址,以及s的地址,此时s指向数组的第一个值,即是1.10。
s=(float
*)calloc(1,sizeof(float));把s
的指向改变了,即是改变了指针的值。
*s=*p1+*p2++;运算,不管
但是返回的时候,s指向的位置没有变,还是1.10,所以输入是1.10
关键在于理解C语言的直传递,对于指针,传递的是地址的值,所以,地址的值的修改也是对数据没有影响的。去掉s=(float
*)calloc(1,sizeof(float));结果就是相加的了。
fun(a,b,s);传入数组a,b的地址,以及s的地址,此时s指向数组的第一个值,即是1.10。
s=(float
*)calloc(1,sizeof(float));把s
的指向改变了,即是改变了指针的值。
*s=*p1+*p2++;运算,不管
但是返回的时候,s指向的位置没有变,还是1.10,所以输入是1.10
关键在于理解C语言的直传递,对于指针,传递的是地址的值,所以,地址的值的修改也是对数据没有影响的。去掉s=(float
*)calloc(1,sizeof(float));结果就是相加的了。
展开全部
int addc(int a,int b,int c)
{c=a+b;
return(c);}
是个求和函数,函数调用後返回a+b的和,也就是c
主函数中,x=4,y=2
z=x+y=6,
对於r=addc(addc(x,y,z),addc(y,z,x),z)
r的值是通过addc函数计算的,其中的两个参数又是通过addc计算的,如果你的编译器读取参数的顺序是从左到右,那麼
先计算addc(x,y,z),结果是6,
再计算addc(y,z,x),结果是8,
最後r=addc(6,8,z),结果是14。
另外,
printf("%d/n",r);应该改为printf("%d\n",r);
{c=a+b;
return(c);}
是个求和函数,函数调用後返回a+b的和,也就是c
主函数中,x=4,y=2
z=x+y=6,
对於r=addc(addc(x,y,z),addc(y,z,x),z)
r的值是通过addc函数计算的,其中的两个参数又是通过addc计算的,如果你的编译器读取参数的顺序是从左到右,那麼
先计算addc(x,y,z),结果是6,
再计算addc(y,z,x),结果是8,
最後r=addc(6,8,z),结果是14。
另外,
printf("%d/n",r);应该改为printf("%d\n",r);
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先z=x+y=6..主要是这个函数的调用r=addc(addc(x,y,z),addc(y,z,x),z);先执行这个addc(x,y,z)并返回值为6,再调用这个addc(y,z,x)并返回值为8,最后调用addc(addc(x,y,z),addc(y,z,x),z);即addc(6,8,6);最终返回值为14.。
最好自己在r=addc(addc(x,y,z),addc(y,z,x),z);这个地方设置断点调试一下,看一下计算机内部是怎么运行的,这样有助于你理解。。
最好自己在r=addc(addc(x,y,z),addc(y,z,x),z);这个地方设置断点调试一下,看一下计算机内部是怎么运行的,这样有助于你理解。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这种程序是学校让学生加深C语言语法的理解的吧,要知道C语言是传值调用的,所以函数调用不会影响实参的值,所以addc函数只是计算两个数的和而已。此外C语言是可以递归的,默认的调用约定是__cdecl,将参数从右到左入栈,不过这里最终的值不受这个概念的影响,所以最终的值就是
2*x + 3*y = 14
2*x + 3*y = 14
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
函数类型为空,所以函数fun对这个程序没作用。指针变量*s仍指向数组a的首元素1.1的地址,输出格式为%5.2f,保留两位小数,所以输出1.10
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询