C语言中的全局变量和局部变量分别是指什么?

如题所述

解答问题前,先说明一下,当全局变量和局部变量同名时,要看当前代码所处的作用域,默认使用当前作用域内的同名局部变量。
分析你所提供的代码:
#include
int a = 4;
//全局变量
int f(int n)
{
int t = 0;
static int a = 5;
//局部静态变量
if( n%2 )
{
int a = 6;
// if作用域内局部变量
t += a++;
// 此处的a是指if作用域内的局部变量,该变量在作用
// 域结束后,生存周期结束。
}
else
{
int a = 7; // else作用域内局部变量
t += a++;
// 此处的a是指else作用域内的局部变量
// 作用域结束后,生存周期结束
}
return t+a++;
// 此外的a是指f函数作用域内的静态局部变量,
// 每次f函数调用return后,此静态局部变量a自增1
}
int main ( void )
{
int s=a, i=0;
// 根据作用域,此处的a是指全局变量,所以s初始值为4
for(;i<2;i++) s+=f(i);
printf("%d\n",s);
return 0;
}根据以上,分析运行流程:
由上可知,s初始值为4;
当i=0时,第一次循环,调用f()函数,由于0%2为0,会进入else后代码,此时t=0+7=7,调用f()函数的return时,会返回7+5=12,同时f()函数的静态局部变量a由5变为6(下次调用生效),s=4+12=16。
当i=1时,第二次循环,调用f()函数,由于1%2为1,会进入if后代码,此时t=0+6=6,调用f()函数的return时,会返回6+6=12,同时f()函数的静态局部变量a由6变为7(下次调用生效),s=16+12=28。
当i=2时,循环终止,打印s值为28。
关于最后的问题,是因为f()函数中if后面的变量a作用域只限制在if后的花括号内,代码退出该作用域后,该变量生存周期结束而被释放,return中使用的a是f()函数中定义的静态局部变量a,所以,不管前者如何赋值,对return中的a没有影响。
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-07-11
全局变量是对于整个主程序而言的,局部变量则是针对于你写的某个函数而言的、、、
第2个回答  2019-03-06
根据使用范围来区分的。
1。局部变量
他是
指在函数内部定义的变量
作用域为定义局部变量的函数
也就是说他只能在定义他的函数中使用
最值得注意的是
只有在程序执行到定义他的模块时才能生成,一旦执行退出该模块则起变量消失
eg.
func
()
{
int
x;
局部变量x的作用域
很明确
......
}
2。全局变量
在程序执行的过程中一直有效
eg.
int
x=1;
func
()
{
x=x+1;
}
func1
()
{
x=x-1;
}
main
()
{
}
由此不难看出整型x的作用范围
对于全局变量
如果在定义的时候不做初始化
则系统将自动为起赋值
数值型为0
字符型为空'\\0'
全局变量的弊端
增加内存开销
降低函数的通用性
定义全局变量时
理想的位置是在文件的开头
当这些函数以及同一个程序中的其他源程序文件中的某些函数需要使用该全局变量时
在函数内部对该变量使用extern
加以说明
说明他是外部的
(这里还要做详细的讲解)
eg.
main
()
{
extern
int
a,b;
printf
("mIn
is
%d\
",min(a,b));
}
int
a=1,b=2;
int
min
(x,y)
int
x,y;
{
int
z;
z=x
评论
0
0
加载更多

C语言中的全局变量和局部变量有什么区别?
C#中没有全局变量的概念,可以定义一个common类,通过静态变量来存放所有需要的全局变量,调用的时候通过common来调用即可。调用的时候使用“命名空间.common.属性名”即可,例如 string m_name = common.Name ;common.farray [0, 2] = 0.5 ;...

c语言全局变量和局部变量题目?
C 一. 局部变量&全局变量 1 局部变量:“在函数内定义的变量”,即在一个函数内部定义的变量,只在本函数范围内有效。2 全局变量:“在函数外定义的变量”,即从定义变量的位置到本源文件结束都有效。目的:增加函数间数据联系的渠道。由于同一文件中的所有函数都能引用全局变量的值,因此如果在一个函...

什么是局部变量
C语言全局变量和局部变量 引子--- ? ?? ???变量可以在程序中三个地方说明: 函数内部、函数的参数定义中或所有的函数外部。根据所定义位置的不同, 变量可分为局部变量、形式参数和全程变量。从空间角度来看,变量可以分为全局变量和局部变量,而从时间角度来分的 可以有静态存储变量和动态存储变量之分...

c语言中局部变量和全局变量的区别是什么
1. 全局变量是在所有函数外部定义的变量,其作用域为整个程序,包括所有.c和.h文件。因此,全局变量对于整个程序来说是可见的。使用全局变量时,应确保其名称清晰易懂,避免名称冲突,并避免在全局作用域中使用大量不必要的变量。2. 局部变量是在特定函数或过程中定义的变量,它们的作用域仅限于定义它们...

C语言中 局部变量和全局变量的概念?
局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内, 离开该函数后再使用这种变量是非法的。例如:int f1(int a) \/*函数f1*\/ { int b,c;……} a,b,c有效 int f2(int x) \/*函数f2*\/ { int y,z;……} x,y,z有效 main(){ int m,n;……}...

什么是局部变量
C语言中的变量按定义位置可分为局部变量、形式参数和全局变量,根据存储方式分为静态存储和动态存储。接下来,我们将深入探讨这些概念。1. 局部变量:在函数内部定义,其作用域仅限于该函数,函数执行结束时自动消失。例如:int x; \/\/ 局部变量,仅在func()函数中有效 2. 全局变量:在函数外部定义,...

局部变量,全局变量
1. 在编程中,理解变量的作用域是非常关键的。主要分为局部变量和全局变量两种。2. 局部变量,也被称为内部变量,是在函数内定义的。它们的作用域仅限于函数内部,离开该函数就不能再使用这些变量。3. 局部变量的使用范围明确,易于管理和避免冲突。例如,形参和实参的变量名相同,不会产生混淆。4. ...

什么是局部变量
C语言全局变量和局部变量 引子--- ? ?? ???变量可以在程序中三个地方说明: 函数内部、函数的参数定义中或所有的函数外部。根据所定义位置的不同, 变量可分为局部变量、形式参数和全程变量。从空间角度来看,变量可以分为全局变量和局部变量,而从时间角度来分的 可以有静态存储变量和动态存储变量之分...

C语言全局变量与局部变量的区别有哪些
局部变量:在程序中,只在特定的过程或函数中可以访问的变量,是相对与全局变量而言的。全局变量也称为外部变量,是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。全局变量全部存放在静态存储区,在程序开始执行时给全局变量分配存储区,程序行完毕就释放。局部变量可以和全局变量...

C语言中变量作用域和区别是什么?
全局变量:在函数之外定义的变量称为全局变量。全局变量可以为本文件中其他函所共用(作用域),它的有效范围(生存期)从定义变量开始到文件结束。如果在同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量被“屏蔽”,即全局变量不起作用。下面来看一个例子:include"stdio.h"...

相似回答