变量定义和声明的差别(整理)
变量的声明有两种情况:
1、一种是须要建立存储空间的。比如:int a 在声明的时候就已经建立了存储空间。
2、还有一种是不须要建立存储空间的。 比如:extern int a 当中变量a是在别的文件里定义的。
声明是向编译器介绍名字--标识符。它告诉编译器“这个函数或变量在某处可找到,它的模样象什么”。
而定义是说:“在这里建立变量”或“在这里建立函数”。它为名字分配存储空间。不管定义的是函数还是变量,编译器都要为它们在定义点分配存储空间。对于变量,编译器确定变量的大小,然后在内存中开辟空间来保存其数据,对于函数,编译器会生成代码,这些代码终于也要占用一定的内存。
总之就是:把建立空间的声明成为“定义”,把不须要建立存储空间的成为“声明”。
基本类型变量的声明和定义(初始化)是同一时候产生的;而对于对象来说,声明和定义是分开的。
比如:类A
假设A a;就是一个声明,告诉编译器a是A类的一个对象变量,可是不进行初始化;
假设以后a=new A();这就是初始化,分配了空间。
(我们声明的终于目的是为了提前使用,即在定义之前使用,假设不须要提前使用就没有单独声明的必要,变量是如此,函数也是如此,所以声明不会分配存储空间,仅仅有定义时才会分配存储空间。)
用static来声明一个变量的作用有二:
(1)对于局部变量用static声明,则是为该变量分配的空间在整个程序的运行期内都始终存在。
(2)外部变量用static来声明,则该变量的作用仅仅限于本文件模块。
补充:
什么是定义?什么是声明?它们之间的差别是什么?
所谓定义就是(编译器)创建一个对象,为这个对象分配一块内存,并给它取上一个名字,这个名字就是就是我们常常所说的变量名或对象名。
声明有2重含义:
(1) 告诉编译器,这个名字已经匹配到一块内存上,以下的代码用到变量或者对象是在别的地方定义的。声明能够出现多次。
(2) 告诉编译器,这个名字已经被预定了,别的地方再也不能用它来作为变量名或对象名。
定义和声明的最重要差别就是:
定义创建对象并为这个对象分配了内存,声明没有分配内存。
參考文献:
http://hi.baidu.com/kingcham/blog/item/71740f12ab31012fdc54015d.html
http://apps.hi.baidu.com/share/detail/20436534
《C语言深度解剖》 北京航空航天大学出版社 陈正冲 P2-P3
相关文章
- beanshell入门:脚本中引用自定义的变量和方法和定义运行时变量
- java定义数组变量初始化为0_java中怎么数组初始化?
- 变量定义规范_类型转换运算符
- 拥抱更底层技术——从CSS变量到Houdini
- matlabfor循环变量_matlab定义自变量区间
- Scala_scala定义变量
- 性能测试(第3集)第17讲JMeter测试计划&线程组&HTTPCookie管理&用户定义的变量&HTTP头信息管理&循环控制器
- (十)给数组变量添加类型
- PostgreSQL查看带有绑定变量SQL的通用方法详解
- Oracle 系统变量函数用法指南
- MySQL Variables explicit_defaults_for_timestamp 数据库 参数变量解释及正确配置使用
- MySQL Variables offline_mode 数据库 参数变量解释及正确配置使用
- MySQL Variables show_old_temporals 数据库 参数变量解释及正确配置使用
- MySQL Variables ssl_key 数据库 参数变量解释及正确配置使用
- 指针变量及其定义,C语言指针变量定义详解
- Linux LANG变量设置:定义系统的主语系环境
- Shell变量测试与内容置换
- Mysql中定义数组变量的方法(mysql定义数组变量)
- Ansible-Playbook中使用变量
- Oracle事务中定义变量的研究(oracle事务定义变量)
- 研究Oracle中的会话变量(oracle会话变量)
- PHP教程变量定义
- 深入ORACLE变量的定义与使用的详解
- JavaScript定义变量和变量优先级问题探讨
- JavaScript中的变量定义与储存介绍