预览加载中,请您耐心等待几秒...
1/5
2/5
3/5
4/5
5/5

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

C语言局部变量和全局变量C语言局部变量和全局变量C语言允许直接访问物理地址,可以直接对硬件进行操作。那么大家知道C语言局部变量和全局变量是什么呢?下面一起来看看!形参变量要等到函数被调用时才分配内存,调用结束后立即释放内存。这说明形参变量的作用域非常有限,只能在函数内部使用,离开该函数就无效了。所谓作用域(Scope),就是变量的有效范围。不仅对于形参变量,C语言中所有的变量都有自己的作用域。决定变量作用域的是变量的定义位置。局部变量定义在函数内部的变量称为局部变量(LocalVariable),它的作用域仅限于函数内部,离开该函数后就是无效的,再使用就会报错。例如:intf1(inta){intb,c;//a,b,c仅在函数f1()内有效returna+b+c;}intmain(){intm,n;//m,n仅在函数main()内有效return0;}几点说明:1)在main函数中定义的变量也是局部变量,只能在main函数中使用;同时,main函数中也不能使用其它函数中定义的变量。main函数也是一个函数,与其它函数地位平等。2)形参变量、在函数体内定义的变量都是局部变量。实参给形参传值的过程也就是给局部变量赋值的过程。3)可以在不同的函数中使用相同的变量名,它们表示不同的数据,分配不同的内存,互不干扰,也不会发生混淆。4)在语句块中也可定义变量,它的作用域只限于当前语句块。全局变量在所有函数外部定义的变量称为全局变量(GlobalVariable),它的作用域默认是整个程序,也就是所有的源文件,包括.c和.h文件。例如:inta,b;//全局变量voidfunc1(){//TODO:}floatx,y;//全局变量intfunc2(){//TODO:}intmain(){//TODO:return0;}a、b、x、y都是在函数外部定义的全局变量。C语言代码是从前往后依次执行的,由于x、y定义在函数func1()之后,所以在func1()内无效;而a、b定义在源程序的开头,所以在func1()、func2()和main()内都有效。局部变量和全局变量的综合示例【示例1】输出变量的值:#includeintn=10;//全局变量voidfunc1(){intn=20;//局部变量printf("func1n:%d",n);}voidfunc2(intn){printf("func2n:%d",n);}voidfunc3(){printf("func3n:%d",n);}intmain(){intn=30;//局部变量func1();func2(n);func3();//代码块由{}包围{intn=40;//局部变量printf("blockn:%d",n);}printf("mainn:%d",n);return0;}运行结果:func1n:20func2n:30func3n:10blockn:40mainn:30代码中虽然定义了多个同名变量n,但它们的作用域不同,在内存中的位置(地址)也不同,所以是相互独立的变量,互不影响,不会产生重复定义(Redefinition)错误。1)对于func1(),输出结果为20,显然使用的是函数内部的.n,而不是外部的n;func2()也是相同的情况。当全局变量和局部变量同名时,在局部范围内全局变量被“屏蔽”,不再起作用。或者说,变量的使用遵循就近原则,如果在当前作用域中存在同名变量,就不会向更大的作用域中去寻找变量。2)func3()输出10,使用的是全局变量,因为在func3()函数中不存在局部变量n,所以编译器只能到函数外部,也就是全局作用域中去寻找变量n。3)由{}包围的代码块也拥有独立的作用域,printf()使用它自己内部的变量n,输出40。3)C语言规定,只能从小的作用域向大的作用域中去寻找变量,而不能反过来,使用更小的作用域中的变量。对于main()函数,即使代码块中的n离输出语句更近,但它仍然会使用main()函数开头定义的n,所以输出结果是30。【示例2】根据长方体的长宽高求它的体积以及三个面的面积。#includeints1,s2,s3;//面积intvs(inta,intb,intc){intv;//体积v=a*b*c;s1=a*b;s2=b*c;s3=a*c;returnv;}intmain(){intv,length,width,height;printf("Inputlength,widthandheight:");scanf("%d%d%d",&length,&width,&height);v=vs(