首先说明一下你的程序的问题与缺陷:
成都创新互联公司-专业网站定制、快速模板网站建设、高性价比玉门网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式玉门网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖玉门地区。费用合理售后完善,十多年实体公司更值得信赖。
1: return语句 只能返回一个值,而不能写成 “return h,l;”
2:你在main()中定义了h,l,而在调用cal()时,又定义了h,l,这两个h,l是完全不同的两组。即使你为cal()里的h,l赋值,那么返回到main()时,h,l仍然为0.
3:你在cal()里的scanf写的不好。两个%d之间最好什么都没有,加了逗号,可能会在读取时,h,l赋值错误。(具体请看我下面的程序)
下面是我的解法:
先问一下,你用的是TC2.0还是VC6.0?
如果是VC6.0,那么可以使用引用类型:
/*法一:使用引用*/
#includestdio.h
void cal(intch, intcl); /*声明ch,cl为引用类型*/
void main()
{
int h=0,l=0;
cal(h, l); /*这里将h,l传入cal()*/
printf("%d,%d",h,l);
}
void cal(int ch, int cl)
{
scanf("%d%d",ch,cl);/*这里为ch,cl赋值*/
}
TC2.0中好像不支持引用类型。我没测试。
-------------------------
如果是TC2.0,那么可以使用指针:
/*法二:使用指针*/
#includestdio.h
void cal(int *ph, int *pl); /*这里将ph,pl声明为指针*/
void main()
{
int h=0,l=0;
cal(h, l); /*将变量h,l地址传过去。*/
printf("%d,%d",h,l);
}
void cal(int *ph, int *pl)
{
scanf("%d%d",ph,pl); /*为ph,pl赋值*/
}
------------------
以上两种方法都可以解决你说的问题。
有问题请追问。
①为什么需要return?
为了回答这个问题,
我打算用 模块思维 来解释。
②定义模块(形参模块)
定义函数:f(s)(a,b)
满足公式:s=a+b
函数名:f(s)
形参: a,b(公式中的 变量 )
函数返回值:return s
③调用模块(实参模块)
主函数:main()表示用户自己编写的部分
调用函数:f(s)(1,2)
满足公式:x=f(s)(1,2)
函数名:f(s)和定义函数一致,产生调用
实参 :1,2( 赋值 给公式的值)
求值:printf("%d\n",x),求x的值?
④值的传递过程
调用模块 中调用函数x=f(s)(1,2)
将实参1和2的值赋值给
定义模块 中的形参a和b
(实参到形参是单向传递,不可逆)
定义模块计算出s=a+b=1+2=3
定义模块 中的return s
将s的值赋值给
调用模块 中的函数f(s)(1,2)
即x=f(s)(1,2)=s=3
~
return s的作用
就是将定义模块中的s
赋值 给调用模块中的调用函数
如果没有return s
调用模块中的调用函数将永远没有定值
即所求x 无定值
这一点和数学不一样,
数学中
同一函数名的值是 通用 的,
C语言中
定义函数和调用函数的值是 隔离 的,
尽管函数名一样
如果不赋值,调用函数永远无定值。
return后接一个值。\r\n在调用这个函数的函数里面,调用它的时候希望获得一个值,如果不希望获得这个值的时候,用void声明就好。如果需要,比如说需要得到一个整形值\r\n就声明\r\nint func()\r\n在调用它的比如main里面\r\nfunc()的作用就可以相当于一个int型常数\r\n比如外面定义了\r\nint max(int a,int b)\r\n{\r\nreturn ab?a:b;\r\n}\r\n主函数里面是\r\nmain()\r\n{\r\nint A;\r\nA=max(1,2);\r\n}\r\n这时候就是通过max计算 12 则return 一个1 ,1
回答于 2022-11-16
你这个问题很笼统
我就大概说下返回值的东东吧
在C语言里面所谓返回值是说一个函数当他执行到return的时候他会停止执行下面的语句向引用他的地方传递一个值
下面举例子说明
int
pp(void
)
//那个int就代表返回值的类型
{
……
return
0;
//这个就代表给执行pp这个函数的地方返回int类型的0
}
如果在主函数中有一句a=pp();那么等号右边就等于int
类型的0
,如果a是int类型那么a就等于0
return后面还可以接表达式
int
kk(int
a,int
c)
{
return
a+c;
//这个就代表给执行pp这个函数的地方返回a+c的结果
}
如果调用的地方写int
k;
k=kk(3,4);那么结果就是k等于7
当然返回值类型不是只有int
还可以有char
float那些和结构体类型
如果你不需要返回的时候可以写void
kk(void){}这样就不会返回了
但是如果你是写
kk(void){}没有前面的void默认是给你在前面补上int的而不是无返回值
还有什么问题你再追问吧