欢迎大家来到IT世界,在知识的湖畔探索吧!
哈喽,各位朋友,大家好。最近寒潮来袭,大幅度降温,大家可要注意保暖了。
这篇文章就和大家来聊一聊C语言中的作用域,了解什么是作用域,以及它有什么作用。
欢迎大家来到IT世界,在知识的湖畔探索吧!
作用域
首先我们先把作用域这个词拆开了理解:
作用:发挥用处,能用。
域:表示有边界、有范围的地方。
合起来,作用域的意思就是在某个范围内,才能发挥作用。
一旦离开这个范围,就没有用处了。
打个比喻:在自己家里吹嘘,总统都是傻子,世界首富可以更有钱,爹妈也只能是遗憾地看着自家的傻儿子,不会直接赶出家门;如果跑到别人家吹嘘,还没进门,就会被人家乱棍打出。
在C语言当中,作用域主要是分成了两个:全局作用域和局部作用域。用来描述变量能起作用的范围。
局部作用域,就相当于是家里和别人家里。
全局作用域,相当于一个村子。村长可以到这家吹牛,也可以到那家吹牛,大家碍于身份,也不好赶人出去,只好是捏着鼻子听着。
村长则是相当于全局变量,可以到处去吹牛;而你只是一个局部变量,在自家就算了,跑到别人家,你就知道了什么是社会险恶。
全局作用域,又叫做文件作用域,也就是我们所编写的源文件(.c)就是一个全局作用域。
int a=1; int main(){ int b=3, c; c = a+b; // 4 }
欢迎大家来到IT世界,在知识的湖畔探索吧!
在这个作用域里声明的变量,就叫做全局变量,它可以应用在文件中从声明之后的任意一个地方,可以是函数体里面,可以是循环里面,判断里面等等。
直到程序结束,才算是寿终正寝。
局部作用域,又被细分为块级作用域、函数作用域、函数原型作用域。
块级作用域,即用花括号 {…} 包裹起来的内容。如循环体、判断体、函数体。
欢迎大家来到IT世界,在知识的湖畔探索吧!for(int i=0;i<10;i++){ int a; a = 1; }
{…} 相当于孙悟空给唐僧画的圈圈,在圈里面你是绝对安全的,但是自己跳出去,那就是在作死了。
在代码块里面声明的变量也叫作局部变量,它的作用范围也仅限于这块代码中。当代码块运行结束,这个变量也将会被销毁。
想要在外面直接使用这个变量,是不能的。当然这也不是绝对,想要在外部使用局部变量,方法是有的,这里暂且不说,后面有用到再展开。
函数作用域,即从函数定义的形式参数开始,到函数结束这个范围内。
void swap(int a, int b){ int temp = a; b = a; a = temp; }
函数原型作用域,就只有从声明的参数列表左括号开始,到右括号结束。
欢迎大家来到IT世界,在知识的湖畔探索吧!int add(int, int);
作用域限制了变量的使用范围,保证了变量使用的安全性。
从另一个角度上来说,提高了变量名的复用性,减少了我们去想不同变量名的烦恼。
全局和局部变量的区别
看完了作用域,接下来咱们看一下全局变量和局部变量有什么区别。
第一个区别,名称上的区别…全局和局部。
全局变量,即在全局作用域,所有代码块和函数之外声明的变量。生命周期是从变量声明开始,到程序结束。可以用在声明之后文件中的任何地方。
局部变量,即在局部作用域,函数中或者代码块中声明的变量。生命周期是从变量声明开始,到代码快结束或者函数结束。只能在声明的代码块或者函数中使用。
第二个区别,初始值的区别。
如果初始化了变量,但是没有进行初始化,那么编译器会给全局变量和局部变量一个什么样的值?
#include<stdio.h> int a; int main(){ int b; printf("a的值为:%d\n", a); printf("b的值为:%d\n", b); return 0; }
运行结果:
a的值为:0
b的值为:
全局变量声明后未进行初始化,编译器会自动给变量赋值。int 就赋值 0;char 赋值 \0;指针类型,赋值一个 00000000。
局部变量声明后未进行初始化,编译器会随机给变量赋值,这个值是未知的,就会产生脏数据。
所以一般声明了普通的局部变量,建议是直接对其进行初始化。
总结
作用域:用来描述变量所能作用的范围。
作用域的分类:全局作用域和局部作用域。
全局作用域,即文件作用域,整个源文件(.c)都是作用域。
局部作用域,细分块级作用域、函数作用域、函数原型作用域。
变量的划分:全局变量和局部变量。
两者区别:1、声明位置,使用范围不同;2、未初始化的默认值也不同。
关于作用域以及变量一些扩展的内容就到这里结束了,希望能对大家有所帮助。文中有什么不当之处,还请大家不吝指出。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/100590.html