首页 » C语言解惑 » C语言解惑全文在线阅读

《C语言解惑》6.2 函数变量的作用域

关灯直达底部

【例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函数。