zoukankan      html  css  js  c++  java
  • [C语言]变量的声明和定义有什么区别

    为变量分配地址和存储空间的称为定义,不分配地址的称为声明。

    变量定义:用于为变量分配存储空间,还可为变量指定初始值,程序中,变量有且仅有一个定义。

    变量声明:用于向程序表明变量的类型和名字。

    定义也是声明:当定义变量时我们声明了它的类型和名字。

    extern声明不是定义,因为不分配存储空间。extern告诉编译器,变量在其他地方定义了。

    //声明一个外部变量:(通过使用extern关键字,可以声明变量名而不定义它)
    extern int Number;
    //定义一个变量
    int Number;

    如果声明有初始化式,就被当作定义,即使前面加了extern。

    只有当extern声明位于函数外部时,才可以被初始化。

    //是extern声明,也是定义,因为对变量进行了初始化
    extern double pi=3.1416; 

    一个变量可以在多个地方声明,但是只能在一个地方定义。

    加入extern修饰的是变量的声明,说明此变量将在文件以外或在文件后面部分定义。

    说明:很多时候一个变量,只是声明不分配内存空间,直到具体使用时才初始化,分配内存空间,如外部变量。

    变量的声明有两种情况:

    1、一种是需要建立存储空间的。例如:int Number 在声明的时候就已经建立了存储空间。

    2、一种是不需要建立存储空间的。 例如:extern int Number 其中变量Number是在别的文件中定义的。

    前者是“定义性声明(defining declaration)”或者称为“定义(definition)”,而后者是“引用性声明(referncing declaration)”。

    从广义的角度来讲声明中包含着定义,即定义是声明的一个特例,所以并非所有的声明都是定义,例如:int Number 它既是声明,同时又是定义。然而对于 extern int Number 来讲它只是声明不是定义。

    一般的情况下我们常常这样叙述:建立存储空间的声明称之为“定义”,不需要建立存储空间的声明称之为“声明”。

    很明显我们在这里指的声明是范围比较窄的,即狭义上的声明,也就是说非定义性质的声明。

    函数的声明和定义的区别比较简单,只是看函数之后是否带有{ }即可;

    带有{ }的就是定义,不带的就是声明;

    注意事项:
    1.变量定义不要放在.h文件中,这会导致重复定义的错误;

    2.可以在头文件中声明一个变量,在用的时候包含这个头文件就声明了这个变量;

    总结:
    1.变量在使用之前要被定义或者声明;

    2.变量只能被定义一次,但是可以被声明很多次;

    3.定义会分配相应的存储空间,但是声明不会;

    注意:

    有三个例外,以下三种实体的定义也可以放到头文件中:

    1.值在编译时就已知的const变量的定义可以放到头文件中;

    2.类的定义可以放到头文件中;

    3.inline函数;

    这三个实体可以定义在多个源文件中,只要在每个源文件中的定义相同;

  • 相关阅读:
    Java多线程运行机制的基本原理
    JAVA IO中的设计模式
    C++ 内存泄露处理方法 (转)
    使用PageHeap.EXE或GFlags.EXE检查内存越界错误 (转)
    32位Windows7上8G内存使用感受+xp 32位下使用8G内存 (转)
    windows 32位系统中进程最大可用内存空间为3GB (转)
    OpenGL 4.0 GLSL 实现 投影纹理映射(Projective Texture Mapping) (转)
    DebugView 调试工具
    剑桥中国史:“571”——林彪的未遂政变(转)
    邱会作与儿子对话:林彪的莫须有之罪(转)
  • 原文地址:https://www.cnblogs.com/LeeCookies/p/12663366.html
Copyright © 2011-2022 走看看