第8章 函数(三)全局变量和局部变量的概念

简介:      声明:文中观点仅代表个人,其中文字、图片未经本人许可,不得部分或全部转载,违者所造成影响后后果自负!联系本人方式:80368704@qq.com QQ:80368704     我们在前面2节中,实现了3个程序的合并,使1个程序实现了3个功能,实现了我们的最初的想法。

 

    声明:文中观点仅代表个人,其中文字、图片未经本人许可,不得部分或全部转载,违者所造成影响后后果自负!联系本人方式: 80368704@qq.com QQ:80368704

     我们在前面2节中,实现了3个程序的合并,使1个程序实现了3个功能,实现了我们的最初的想法。那么对于第1节中的程序4,现在,让我们很高兴的运行它,用其求3和2的最大值、最小值和平均值.

     main()在调用max()时,输入3和2,屏幕输出3;

     main()在调用min()时,输入3和2,屏幕输出3;

     main()在调用average()时,输入3和2,屏幕输出2.5;

     结果没有问题,只是有些许遗憾的地方.

     例如:同一个程序,同一组数据3和2,在求解max,min,average时要重复输入3次;

     要是能在开始求解前,输入3和2,分别存在变量a和b中,然后,a和b能让3个函数共用,就简单一些了。要实现上面的想法,我们需要把程序改动2个地方:

     1、要在调用3个函数之前,输入3和2。

       于是我们把3个子函数中的输入语句scanf("%f%f",&a,&b);移动一下,移动到main()函数中,放在

调用3个子函数之前,当然3个子函数中就不要输入语句了。

     2、存放3和2的变量a和b,必须能被max()、min()、average()和main()共用。

       我们把3个子函数中的 float a,b;也移动一下,移到程序的开头部分,

紧跟着#include〈stdio.h 〉.当然三个函数中的float a,b;语句就不要了.

于是程序4变成了如下程序5

程序5:

/********************************************************/

#include〈stdio.h〉

float a,b;/*-------------改动1------------------------------*/

void max()/*求任意2个数字的最大值。*/

{float m;

m=a>b?a:b;

printf("%f/n",m);

}

void min()/*求任意2个数字的最小值。*/

{float m;

m=a<b?a:b;

printf("%f/n",m);

}

void average()/*求任意2个数字的平均值。*/

{float m;

m=(a+b)/2;

printf("%f/n",m);

}

void main()

{

scanf("%f%f",&a,&b);/*--------改动2----------------*/

max();

min();

average();

}

/**********************************************************/

 

       这样程序5就实现了我们的数据3和2,只输入1次的想法。

 

     需要强调说明一下为什么变量定义语句float a,b;要移到函数外?

       我们看到的程序4,max()、min()、average()每一个函数的函数体中都有同样的变量定义

语句float a,b; 各自是各自的,互不相干。这是因为C语言规定,在某个函数内定义的变量,只能

在本函数中使用,其他函数不能使用。因此max()函数中的float a,b;和min()函数中的float a,b;

是不同的变量,就和你有2只手,我有两只手,都叫手,但你是你的,我是我的。当变量的定义在某

个函数内部,我们叫该变量为局部变量。我们的程序4中,所有变量都是在某个函数内部定义的,

都是局部变量。

       在程序5中。我们将float a,b;移出函数,移动到紧跟着#include〈stdio.h〉,在max()、min()、

average()和main(),4个函数的前面。这一移动不要紧,一下子,变量a和b不再属于任何一个函数,

而是在函数之外定义的,对于我们这个程序,变量a和b在所有函数之前。

       C语言规定,当变量的定义不在任何函数内部,或者说变量的定义在函数之外,我们叫它全局变量

或全程变量。

       我们的程序5中的float a,b;语句定义了2个全局变量,按照C语言的规定,从这一句开始, 其后的所

有函数都可以使用这2个变量,因此max()、min()和average(),以及main()4个函数都可以使用这2个变

量。全局变量可以为本程序文件中其他函数所共用。它的有效范围为从定义变量的位置开始到本源程

序文件结束。

       你翻回头看看程序5,确实是这样的。

相关文章
|
2月前
|
存储 C语言
C语言:普通局部变量、普通全局变量、静态局部变量、静态全局变量的区别
C语言中,普通局部变量在函数内部定义,作用域仅限于该函数;普通全局变量在所有函数外部定义,作用域为整个文件;静态局部变量在函数内部定义但生命周期为整个程序运行期;静态全局变量在所有函数外部定义,但仅在定义它的文件内可见。
61 10
|
2月前
初始化局部变量和全局变量
【10月更文挑战第3天】初始化局部变量和全局变量。
36 5
|
5月前
|
开发者
局部变量,在使用时再定义
关于局部变量,适时定义可以提高代码可读性并规避不必要的bug。示例代码中,为了避免误解`checkTaskApplyDTO`仅设置了`userId`,在`existAppliedTask`方法内部,可以通过将`checkTaskApplyDTO`的定义与设置属性的操作靠近,以明确其所有属性值的来源。 另外,本文还展示了一个因提前定义变量`ret`而导致的bug实例。如果将此变量的定义延迟至其实际使用前,则可以避免此类问题。适时定义变量有助于减少混淆,提高代码质量。
43 4
|
4月前
|
存储
全局变量和局部变量在堆和栈的区别
全局变量和局部变量在堆和栈的区别
422 0
|
存储 C语言 Perl
西门子S7-1200的变量如何使用?什么是局部变量和全局变量?临时变量和静态变量有什么区别?
今天给大家讲一下什么是局部变量、全局变量、临时变量、静态变量,这些变量都有什么区别,以及在西门子S7-1200中这些变量如何来使用。
西门子S7-1200的变量如何使用?什么是局部变量和全局变量?临时变量和静态变量有什么区别?
|
存储 C语言 C++
函数的内部处理及全局变量和局部变量
函数的内部处理及全局变量和局部变量
126 0
函数的内部处理及全局变量和局部变量
|
开发者 Python
全局变量和局部变量 | 学习笔记
快速学习 全局变量和局部变量
129 0
|
编译器 C语言 开发者
局部变量和全局变量|学习笔记
快速学习局部变量和全局变量
156 0
|
存储 程序员 编译器
容易混淆的基本概念 成员变量 局部变量 全局变量
在实际开发与学习中,特别容易混淆几个基本概念:成员变量、局部变量、全局变量。了解这些概念的属性,存储在实际编码中非常有用。
140 0
容易混淆的基本概念 成员变量 局部变量 全局变量