1 变量代表一个有名字的、具有特定属性的一个存储单元;

2 变量用来存放数据,也就是存放变量的值;

3 变量的值可以改变;

4 变量有特定的类型,类型决定了存储单元的大小和变量值的范围,运算符可应用于变量上。

2 变量的本质
从本质上看,变量代表了一段可操作的内存,也可以认为变量是内存的符号化表示。当程序中需要使用内存时,可以定义某种类型的变量。此时编译器根据变量的数据类型分配一定大小的内存空间。程序就可以通过变量名来访问对应的内存了。

3 变量的生命周期和作用域
如果说变量的数据类型决定了对应内存的大小,那么存储类型则影响着对应内存的使用方式。所谓使用方式,具体说就是在什么时间、程序的什么地方可以使用变量,即变量的生命周期和作用域。

先了解两个基本常识:

1 在程序运行时内存中有三个区域可以保存变量:静态存储区、栈(stack)和堆(heap);

2 根据变量定义的位置可分为全局变量(定义在函数体外的变量)和局部变量(定义在函数体内的变量,包括形参)。

3.1 变量的生命周期
1 全局变量和静态局部变量(定义时使用关键字static)都保存在静态存储区,其特点是:在编译时分配内存空间并进行初始化。在程序运行期间,变量一直存在,直到程序结束,变量对应的内存空间才被释放。

2 非静态局部变量(又称为自动变量)保存在栈中,其特点是:在变量所在的函数或模块被执行时动态创建,函数或模块执行完时,变量对应的内存空间被释放。

3 所有用malloc分配的内存(又称为动态内存)都在堆中,其特点是:通过指针来访问动态分配的内存。既可以通过free来手动释放动态内存,也可以在程序结束时由系统自动释放。

3.2 变量的作用域
作用域指的是变量的可见范围,即在变量的生命周期内,程序的哪些部分可以使用该变量。

1 全局变量的作用域从定义点开始一直到源文件的结束。如果要在定义点之前使用全局变量的话就需要使用关键字extern对作用域进行扩展。全局变量默认是可以被其他文件引用的。如果希望仅限于本文件使用的话,需要在定义时使用关键字static。

2 对于局部变量来说,无论是静态局部变量还是自动变量,作用域都仅限于定义该变量的函数或模块。

3 动态内存只要没有被释放就可以在程序的任何地方使用,前提是要知道动态内存的地址。

注意:static加在全局变量前影响的是作用域,加在局部变量前影响的是生命周期。
————————————————
版权声明:本文为CSDN博主「hellosc01」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sc179/article/details/108001112

什么是变量,变量的本质相关推荐

  1. java语言语法--- Java标识符(标识符命名规则)、Java关键字、Java变量(变量的声明、赋值、使用)和常量(字符常量、字面常量)(包括Java字节码文件反汇编命令javap)

    java语言语法- Java标识符.Java关键字.Java变量和常量(包括Java字节码文件反汇编命令javap) 1.标识符 (1)读音:biao zhi fu (2)什么是标识符? (摘自百度百 ...

  2. 【Groovy】Groovy 方法调用 ( 字符串切割 | 使用 Java 语法切割字符串 | 使用 Groovy 语法切割字符串直接为变量赋值 | 数组赋值给变量 变量个数小于等于数组长度 )

    文章目录 一.字符串切割 1.使用 Java 语法切割字符串 2.使用 Groovy 语法切割字符串直接为变量赋值 3.数组赋值给变量 变量个数小于等于数组长度 二.完整代码示例 一.字符串切割 在 ...

  3. 环境变量 变量名 变量值_如何使用环境变量

    环境变量 变量名 变量值 Environment variables are a set of dynamic named values that can affect the way running ...

  4. shell--2--shell变量 定义变量 使用变量 只读变量 删除变量 变量类型 Shell字符串 shell函数

    Shell变量 @1变量即在程序运行过程中它的值是允许改变的量 @2变量是用一串固定的字符来表示不固定的值的一种方法 @3变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储Script ...

  5. 咋筛选变量进入多因素回归 纳入变量 变量选择 类似机器学习的特征选择 cox回归分析cox多因素

    在前期推送的内容中,我们介绍了构建多因素回归模型,探讨对结局指标有独立作用的影响因素,就好比侦探破案找出真凶的过程.我们作为研究人员,就像是一名侦探,通过统计学方法及专业知识,在众多的嫌疑人中一一排查 ...

  6. angular 模板引用变量 #变量名

    文章目录 1背景 2模板内直接使用模板引用变量 2指令.组件等 1背景 学习使用angular material时,看到了将一个模板(也就是html)中定义的变量赋值给了属性,实现了点击按钮触发mat ...

  7. 【MATLAB】变量 ( 变量引入 | 变量类型 )

    文章目录 一.变量引入 ( ans 默认变量 ) 二.变量类型 一.变量引入 ( ans 默认变量 ) 使用 matlab 代码编写如下公式时 , 公式层级很多 , 很复杂 , 需要很多括号进行优先级 ...

  8. php7 变量,变量在PHP7内部的实现(一)

    (点击上方公众号,可快速关注我们) 英文:Nikita Popov 中文:Scholer(@Scholer-L) 链接:http://0x1.im/blog/php/Internal-value-re ...

  9. php为什么要使用变量,为什么在PHP或其他语言中使用动态变量(变量变量)

    我之所以投票,是因为它是主观的,可以结束这个问题(自收回后投票),但经过反思,我认为我可以给出一个客观的答案. 静态变量名称是一个字符序列,表示底层引擎用作标签的标记,用于标识变量所代表的值(非常非常 ...

  10. Java学习笔记2.2.1 常量与变量 - 变量

    文章目录 零.本讲学习目标 一.变量定义 (一)语法格式 (二)案例演示 (三)变量在内存中的状态变化图 二.变量数据类型 (一)整数类型变量 (二)浮点数类型变量 (三)字符类型变量 (四)布尔类型 ...

最新文章

  1. “WPF老矣,尚能饭否”—且说说WPF今生未来(上):担心
  2. 几个进程管理的命令:pkill,pidof,kill,killall,job
  3. 解决不了bug的时候看一下:
  4. Linux下进程的建立
  5. (转)工作了一个星期各位一定累了吧,那我们一起来表单验证一番吧!
  6. SAP UI5 view.bindElement will also trigger an odata request
  7. C语言之字符数组在if{}里面赋值给char *引发的问题
  8. 织梦CMS AJAX分页,可自定义typeid,调取任意内容
  9. 接口测试客户端的搭建
  10. 数据挖掘:围绕 统计与概率、分类与聚类、检索方法 ,原理演示或应用程序
  11. hello 博客园!
  12. 时序分析(3) -- 自回归模型(AR)
  13. 在线教育直播系统 一对一在线直播平台解决方案
  14. C#Windows7任务栏开发Thumbnail Toolbars(缩略图、工具栏按钮)
  15. 江苏省各地级市58同城租房数据
  16. 博图region用法_西门子1200PLC的OB块用法讲解
  17. excel表在html显示图片,html背景图片不显示!如何在Excel里插入背景图片?背景图片可以打印出来吗?...
  18. 卷积网络的平移不变性
  19. 微信公众号网页中页面的关闭事件
  20. 你一定要知道的项目管理高手常用10张图表

热门文章

  1. AD导出生产文件,gerber文件
  2. HIVE 打印表头配置
  3. wtv 看比赛真爽。
  4. 技术无罪,那快播呢?
  5. CF625E Frog Fights
  6. Oracle 11g+PLSQL Developer+SQL Developer+JDK 详细安装教程
  7. 艾美捷热转移稳定性检测试剂盒:简单、灵敏、均匀的荧光测定法
  8. Linux 作业第五周
  9. Ubuntu下安装2017新版QQ
  10. rocketmq python消息堆积_RocketMQ消息存储和查询原理