c++学习笔记——有关变量的声明和定义

转自http://c.biancheng.net/cpp/biancheng/view/143.html

    我们已经知道,一个函数一般由两部分组成:声明部分和执行语句。

    声明部分的作用是对有关的标识符(如变量、函数、结构体、共用体等)的属性进行说明。对于函数,声明和定义的区别是明显的,前边已说明,函数的声明是函数的原型,而函数的定义是函数功能的确立。对函数的声明是可以放在声明部分中的,而函数的定义显然不在函数的声明部分范围内,它是一个文件中的独立模块。

声明,是用以告诉编译器类型及其细节,本身并不涉及内存分配; 

定义,即内存分配,编译器将在相对内存地址上为其对象定址。

  定义的同时也作了声明,当定义的时候我们肯定已经告知编译器其类型及细节,然后才能分配内存。总体来说,它们的根本区别就是有无内存的分配,

   对变量而言,声明与定义的关系稍微复杂一些。在声明部分出现的变量有两种情况:一种是需要建立存储空间的(如int a;);另一种是不需要建立存储空间的(如extern int a;)。前者称为定义性声明(defining declaration),或简称为定义(definition)。后者称为引用性声明(referenceing declaration)。广义地说,声明包括定义,但并非所有的声明都是定义。对“int a;” 而言,它是定义性声明,既可说是声明,又可说是定义。而对“extern int a;” 而言,它是声明而不是定义。一般为了叙述方便,把建立存储空间的声明称为定义,而把不需要建立存储空间的声明称为声明。显然这里指的声明是狭义的,即非定义性声明。例如:

int main( )
{
    extern int a; //这是声明不是定义。声明a是一个已定义的外部变量
}
int a;  // 是定义,定义a为整型外部变量
    外部变量定义和外部变量声明的含义是不同的。外部变量的定义只能有一次,它的位置在所有函数之外,而同一文件中的外部变量的声明可以有多次,它的位置可以在函数之内,也可以在函数之外。系统根据外部变量的定义分配存储单元。对外部变量的初始化只能在定义时进行,而不能在声明中进行。所谓声明,其作用是向编译系统发出一个信息,声明该变量是一个在后面定义的外部变量,仅仅是为了提前引用该变量而作的声明。extern只用作声明,而不用于定义。

   用static来声明一个变量的作用有二:
  • 对局部变量用static声明,使该变量在本函数调用结束后不释放,整个程序执行期间始终存在,使其存储期为程序的全过程。
  • 全局变量用static声明,则该变量的作用域只限于本文件模块(即被声明的文件中)。


阅读更多
文章标签: c++
个人分类: C++
上一篇python练习实例——用curses在终端实现贪吃蛇小游戏
下一篇leedcode笔记(1)——两数之和(链表表示)
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭