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