【例6.3】改正下面程序中的错误。
#include <stdio.h>int sum(int);void main ( ){ int x=19; sum( x ); printf ("/nThe sum is %d/n", x );}int sum( int x){ return (x+x); }
【分析】程序传递x的一个副本到sum(x),并且期望在调用函数后,能得到两数之和。但在sun函数中的变量x,是离开sum就马上消失的副本,因此这个x也就不存在于main函数之中。虽然这个x不存在于main中,但它本身的返回值可以被直接使用。把它作为printf的函数,可以输出这个计算结果。例如使用
printf ("/nThe sum is %d/n", sum( x ) );
语句可以输出计算结果为38。当然,如果主程序想继续使用x,则x的值还是原来的x值,即x=19。sum函数返回计算结果,应使用一个同类型的变量接收这个返回值。本程序仍用x来接收,sum函数的return可以使用表达式,所以没有必要将计算之后的值作为返回值。修改后的完整程序如下:
#include <stdio.h>int sum(int);void main ( ){ int x=19; x=sum( x ); printf ("/nThe sum is %d/n", x );}int sum( int x){ return x+x; }
【例6.4】改正下面程序中的错误。
#include <stdio.h>int mul(int);int main ( ){ const int K=3; double x=8,y; y=mul( x); y+=x; printf ("/n %d/n", y ); return 0;}double mul( double x){ return (x*K); }
声明的函数原型与定义不符合。正确的声明如下:
double mul(double);
函数设计的也不对,因为K不是mul函数里的变量,它无法使用这个变量,应为它增加一个整型变量。修改后的程序如下:
#include <stdio.h>double mul(double,int);int main ( ){ const int K=3; double x=8,y; y=mul( x,K ); y += x; printf ("y=%lf/n", y ); return 0;}double mul( double x,int k){ return (x*k); }
程序输出结果如下:
y=32.000000
如果不愿意修改mul函数,可以将K的定义放到主函数外面,将其定义为外部变量。如下三条语句是等效的:
extern int K=3;static int K=3;const int K=3;
但是,更推荐使用const定义。作为函数定义来讲,希望自成系统。从这一点来看,还是推荐使用两个参数设计mul函数。