【编程基础】C语言的变量-新手必备

大家在初学C语言的时候对各种变量之间的区别以及存储布局可能都有很多疑问,造成在使用变量的时候可能会遇到错误的地方。这里做一个简单的总结。

首先是全局变量和静态变量

全局和静态变量都在堆里。

全局变量的作用范围是整个程序(如果程序是多个文件,必须在其他的文件中说明)。

静态变量的作用范围要看静态变量的位置,如果在函数里,则作用范围 就是这个函数。

静态变量又分为静态全局变量静态局部变量

静态全局变量,只在本文件可以用,虽然整个程序包含多个文件,但静态全局变量只能用在定义它的那个文件里,却不能用在程序中的其他文件里。

它是定义存储因型为静态型的外部变量,其作用域是从定义点到程序结束,所不同的是存储类型决定了存储地点,静态型变量是存放在内存的数据区中的,它们在程序开始运行前就分配了固定的字节,在程序运行过程中被分配的字节大小是不改变的,只有程序运行结束后,才释放所占用的内存。

全局变量是没有定义存储类型的外部变量,其作用域是从定义点到程序结束,省略了存储类型符,系统将默认为自动型。

自动型变量存放在堆栈区中,堆栈区也是内存中一部分,该部分内存在程序运行中是重复使用的。

按存储区域分,全局变量、静态全局变量和静态局部变量都存放在内存的静态存储区域,局部变量存放在内存的栈区。

按作用域分,全局变量在整个工程文件内都有效;静态全局就量只在定义它的文件内有效;静态局部变量只在定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变量不会消失;局部变量在定义它的函数内有效,但是函数返回后失效。

全局变量和静态变量如果没有手工初始化,则由编译器初始化为0。局部变量的值不可知,所以一般在定义的时候一定要赋初值。

原文发布于微信公众号 - 程序员互动联盟(coder_online)

原文发表时间:2015-05-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏xcywt

《Linux命令行与shell脚本编程大全》第十七章 创建函数

可以将shell脚本代码放进函数中封装起来,这样就能在脚本中的任何地方多次使用它了。 17.1 基本的脚本函数 函数:是一个脚本代码块,可以为其命名并在代码中任...

18010
来自专栏李家的小酒馆

多线程的同步和死锁

多线程同步和死锁 在多线程编程中,有可能会出现同时访问同一个资源的情况,这种资源可以是各种类型的的资源:一个变量、一个对象、一个文件、一个数据库表等,而当多个线...

1960
来自专栏上善若水

040android初级篇之标准java版的HelloWorld编译及运行

运行的时候,如果 .class文件不在当前目录则需要使用-classpath 指定所在目录。

713
来自专栏null的专栏

Python技巧——list与字符串互相转换

在Python的编程中,经常会涉及到字符串与list之间的转换问题,下面就将两者之间的转换做一个梳理。 1、list转换成字符串 命令:list() 例子: ?...

2463
来自专栏阿凯的Excel

排序功能(Pandas读书笔记8)

上期分享了如何读取文件内容,读取文件后我们需要对数据进行清理整理,其中一项常做的就是对原始数据进行排序。今天和大家分享如何使用pandas进行排序。 先导入上一...

2896
来自专栏Nian糕的私人厨房

JavaScript 分支/循环语句

if...else 语句,在条件为 true 时执行代码,在条件为 false 时执行其他代码

774
来自专栏python3

python3--面向对象的进阶

反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问,检测和修改它本身状态或行为的一种能力(自省),它首先被程序语言的设计领域所采用,并在Lis...

632
来自专栏Deep learning进阶路

C++随记(一)---字符串数组的输入问题

首先来看一段程序: #include<iostream> using namespace std; int main(){ char name[10],s...

1780
来自专栏Python小屋

Python面向对象程序设计中属性的作用与用法

公开的数据成员可以在外部随意访问和修改,很难保证用户进行修改时提供新数据的合法性,数据很容易被破坏,并且也不符合类的封装性要求。解决这一问题的常用方法是定义私有...

2374
来自专栏L宝宝聊IT

Shell脚本应用(for、while循环语句和case分支语句)

1234

扫码关注云+社区