变量的存储小结

变量是C语言最基础也是最核心的概念,对于初学C语言的同学来说变量的存储总是觉得比较混乱。这里对C的变量做一个简单的小结,希望对大家有所帮助。

我们看到对变量的讲解的时候看到很多概念,属性,存储期,内部链接,外部链接,空链接,全局变量,局部变量,寄存器变量,静态变量等等。看起来很混乱,下面我们梳理一下。

其实我们再使用变量的时候大多关心的只有三个方面:变量的存在期,变量的类型,变量的作用域。

我们想一下变量的定义方法分为三部分:

<存储类别>  <变量的数据类型>   <变量名>

分别理解一下

变量名。这个非常简单我们只要符合变量的命名规则就可以了,数字字母下划线组成,字母或下划线开头,不能为关键字。

变量的类型。这个也不难理解,我们知道有整形(int,long),字符型(char),浮点型(float,double),指针型(*)当然还有数组结构体等。相信这些我们再熟悉不过了。

存储类别。这个是我们今天讨论的重点。数据的存储类别决定了一个数据的存在期和作用域,我们先了解一下存在期和作用域这两个概念。

存在期:变量在内存中保存的时间。其实简单的说主要就两种情况,一是随函数的调用而起作用,随函数的结束而结束。二是作用于整个程序期间,直到程序结束。

作用域:变量能够有效作用的区域。这个简单的说有三种情况,一是只能作用在一个代码块内(或者说函数内),二是作用于整个文件(或者说程序)中,三是除了所在的文件别的文件也可以使用。

那么说了半天我们的存储类别是怎么决定存在期和作用域的呢。别急,就是通过下面几个关键字和变量定义所在的位置这两个条件的组合。

auto为存储类说明符,可以说明一个变量为自动变量。省略存数类型时默认就是auto修饰。所修饰的全局变量在静态区,局部变量在栈中。

register声明的变量属于寄存器存储类。所修饰的变量都在寄存器中保存。

static声明的变量属于静态存储类。所修饰的变量都在静态区。

外部变量的函数中使用extern关键字来再次声明。

我们把这几个关键字和位置的组合总结一下相信会清楚很多:

组合 存储期 作用域 初始值
auto +定义在函数内 和函数同步 函数内 不确定
auto +定义在函数外 和程序同步 本文件(程序)和外部文件 0
static+定义在函数内 和程序同步 函数内 0
static+定义在函数外 和程序同步 本文件(程序)内 0
register + 定义在函数内 和函数同步 函数内 不确定

说明一下,register只能修饰局部变量和形参,因为在寄存器内所以没有地址,也不可能是静态的。

extern :外部引用,当需要外部引用时使用,就不做过多阐述了。

这里只是讨论数据的存储,对关键字的一些其他功能就不做过多的说明了,不知道看了以上的表格对大家理解数据的存储期和作用域有没有一些帮助。

时间: 2024-10-09 20:18:40

变量的存储小结的相关文章

变量的存储类别

全局变量和局部变量 在函数之外定义的变量称为外部变量,也是全局变量:在函数内部定义的变量称为局部变量,它只在本函数范围内有效.全局变量在程序的全部执行过程都占用存储单元,而局部变量只是在调用到该函数的时候才回去动态的给局部变量分配内存空间. 从 变量的作用域角度来分,可以分为全局变量(生命周期是该文件开始到结束)和局部变量(离开该方法或者复合语句就无效):从变量值存在的时间即生命周期来分可以分为 静态存储方式和动态存储方式. 所谓静态存储方式是指在程序运行期间有系统分配指定的存储空间的方式,而动

C语言学习笔记:12_变量的存储方式和生存期

/* * 12_变量的存储方式和生存期.c * * Created on: 2015年7月5日 * Author: zhong */ #include <stdio.h> #include <stdlib.h> /** * 从变量的作用域分: 全局变量,局部变量 * 从变量存在的时间(生命周期)分:静态存储方式,动态存储方式 * * 静态存储方式:在程序运行期间由系统分配固定的存储空间的方式 * 动态存储方式:在程序运行期间根据需要进行动态的分配存储空间的方式. * * 数据存放的

C++变量的存储类别与作用域

总结一下C++中变量的存储类别以及变量的作用域. (1)标示符的存储类别决定了标示符在内存中存在的时间(我们可以理解标示符就是确定一个变量的符号,也就是我们所说的变量名) 二:存储类别 (1)静态存储类别:静态存数类别变量(我们简称静态变量),从程序的开始处就存在,其生命期伴随整个程序. (2)自动存储类别:当变量时自动存储类别时,变量在进入到定义它们的程序快时定义它,在离开它们所在的程序块(作用域)时销毁它,因此成为自动变量.其中关键字auto和register用来声明自动类型的变量, 三:自

【编程语言】变量的存储时期/作用域以及static/extern的用法

存储类:               存储时期       链接         内存管理 对于一个变量(不同的存储类型)可以通过存储时期,链接属性,以及相应的作用域来描述它. 存储时期就是变量在内存中的保留时间,变量的作用域和链接在一起表明程序的哪些部分可以通过变量名来使用该变量.于是就有了不通过的存储时期,链接属性,以及作用域的组合 [1]存储时期(变量的生命期,表示存取一个变量在内存空间的存放以及释放时间)                           局部变量          

c语言 变量的存储类别以及对应的内存分配?

<h4><strong>1.变量的存储类别</strong></h4>从变量值存在的角度来分,可以分为静态存储方式和动态存储方式.所谓静态存储方式指在程序运行期间由系统分配固定的存储空间的方式(<strong>程序开始执行时分配,在程序完毕时释放,在程序过程中它们占据国定的存储单元,而不是动态分配和释放</strong>).而动态存储方式在运行期间根据需要进行动态存储方式(<strong>在程序过程中申请和释放的一些空间&

java笔记之变量的存储方式

1.java变量存储域 java变量的存储区域主要放在以下几个地方: (1)寄存器:可以说是最快的存储区,在C/C++中可以声明寄存器变量,但是在java中不能声明寄存器变量,只是编译器在编译时确定. (2)栈:存放关于基本类型数据和对象的引用,但是对象本身并不在栈里,(通过new出来的)对象放在堆里或者常量池中(字符串的常量对象就放在常量池中). (3)堆:用于存放new出来的对象. (4)常量池:存放字符串常量和基本类型数据的常量(通过 public static final修饰). (5)

编译器架构的王者LLVM——(10)变量的存储与读取

LLVM平台,短短几年间,改变了众多编程语言的走向,也催生了一大批具有特色的编程语言的出现,不愧为编译器架构的王者,也荣获2012年ACM软件系统奖 -- 题记 版权声明:本文为 西风逍遥游 原创文章,转载请注明出处 西风世界 http://blog.csdn.net/xfxyy_sxfancy 变量的存储与读取 变量是一款编程语言中的核心,说编译语言是一种符号处理工具,其实是有些道理的.栈式符号表可以方便的记录编译过程中的变量和语法符号,我们上节已经了解了其中的实现方法.那么,还有没有其他的办

c 变量的存储类型auto等(基础知识)和c函数变量

总结 1).在c语言中每一个变量和函数有两个属性:数据类型和数据的存储类别. 2). 对数据型(如整型.字符型等).存储类别指的是数据在内存中存储的方式. 存储方式分为两大类: 静态存储类和动态存储类 具体包括四种:{自动的(auto), 静态的(static), 寄存器(register), 外部的(extern)}. 根据变量的存储类别, 可以知道变量的作用域和生存期. 例如: 局部变量: 自动变量: int main(void){int a, b, c; 自动变量} 静态局部变量: int

变量的存储空间分配情况

C程序一直由下列部分组成: (1)正文段--CPU执行的机器指令部分:一个程序只有一个副本:只读,防止程序由于意外事故而修改自身指令: (2)初始化数据段(数据段)--在程序中所有赋了初值的全局变量,存放在这里. (3)非初始化数据段(bss段)--在程序中没有初始化的全局变量:内核将此段初始化为0. (4)栈--增长方向:自顶向下增长:自动变量以及每次函数调用时所需要保存的信息(返回地址:环境信息). (5)堆--动态存储分配. 一般认为在c中分为这几个存储区(1).栈 - 有编译器自动分配释