清华大学出版社 TSINGHUA UNIVERSITY PRESS scanf ("%d, %d ,&a, &b) c=max (a, b) printf ( "Max is%d ", c) max(intx,inty)/定义有参函数max int z z =x>y? X: y; return(z)
scanf("%d,%d",&a,&b); c=max(a,b); printf("Max is%d",c); } max(int x,int y max / { int z; z=x>y?x∶y; return(z); }
清华大学出版社 TSINGHUA UNIVERSITY PRESS 运行情况如下 7,8 axs 8 程序中第7~12行是一个函数定义(注意第7行的末尾 没有分号)。第7行定义了一个函数名max和指定两 个形参x、y及其类型。程序第4行是一个调用函数 语句,max后面括弧内的a、b是实参。a和b是main 函数中定义的变量,x和y是函数max中的形式参数。 通过函数调用,使两个函数中的数据发生联系。见 图82
运行情况如下: 7,8 Max is 8 程序中第7~12行是一个函数定义(注意第7行的末尾 没有分号)。第7行定义了一个函数名max和指定两 个形参x、y及其类型。程序第4行是一个调用函数 语句,max后面括弧内的a、b是实参。a和b是main 函数中定义的变量,x和y是函数max中的形式参数。 通过函数调用,使两个函数中的数据发生联系。见 图8.2
清华大学出版社 TSINGHUA UNIVERSITY PRESS c=max(a,b)(main函数) mag(intx,inty)(max函数) fint z z=x>y? x: y; return(z) 图82 关于形参与实参的说明: (1)在定义函数中指定的形参,在未出现函数调用时, 它们并不占内存中的存储单元。只有在发生函数调 用时,函数max中的形参才被分配内存单元。在调 用结束后,形参所占的内存单元也被释放
图8.2 关于形参与实参的说明: (1) 在定义函数中指定的形参,在未出现函数调用时, 它们并不占内存中的存储单元。只有在发生函数调 用时,函数max中的形参才被分配内存单元。在调 用结束后,形参所占的内存单元也被释放
清华大学出版社 TSINGHUA UNIVERSITY PRESS (2)实参可以是常量、变量或表达式,如: max (3, a+b) 但要求它们有确定的值。在调用时将实参的值赋给形 参(如果形参是数组名,则传递的是数组首地址而 不是数组的值。请参阅87节)。 (3)在被定义的函数中,必须指定形参的类型(见例 82程序第7行)。 (4)实参与形参的类型应相同或赋值兼容。例82中实 参和形参都是整型,这是合法的、正确的。如果实 参为整型而形参x为实型,或者相反,则按第2章介 绍的不同类型数值的赋值规则进行转换。例如实参 值a为3.5,而形参x为整型,则将实数35转换成
(2) 实参可以是常量、变量或表达式,如: max(3,a+b); 但要求它们有确定的值。在调用时将实参的值赋给形 参(如果形参是数组名,则传递的是数组首地址而 不是数组的值。请参阅8.7节)。 (3) 在被定义的函数中,必须指定形参的类型(见例 8.2程序第7行)。 (4) 实参与形参的类型应相同或赋值兼容。例8.2中实 参和形参都是整型,这是合法的、正确的。如果实 参为整型而形参x为实型,或者相反,则按第2章介 绍的不同类型数值的赋值规则进行转换。例如实参 值a为3.5,而形参x为整型,则将实数3.5转换成
清华大学出版社 TSINGHUA UNIVERSITY PRESS 整数3,然后送到形参b。但此时应将max函数放 在main函数的前面或在main函数中对被调用函数 max作原型声明,否则会出错。关于对函数的声明 见8.4.3小节。字符型与整型可以互相通用。 (5)C语言规定,实参变量对形参变量的数据传递都 是“值传递”,即单向传递,只由实参传给形参, 而不能由形参传回来给实参,这是和 FORTRA N不同的。在内存中,实参单元与形参单元是不同 的单元。如图8.3所示
整数3,然后送到形参b。但此时应将max函数放 在main函数的前面或在main函数中对被调用函数 max作原型声明,否则会出错。关于对函数的声明 见8.4.3小节。字符型与整型可以互相通用。 (5) C语言规定,实参变量对形参变量的数据传递都 是“值传递”,即单向传递,只由实参传给形参, 而不能由形参传回来给实参,这是和FORTRA N不同的。在内存中,实参单元与形参单元是不同 的单元。如图8.3所示