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函数;

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

  • 相关阅读:
    A1066 Root of AVL Tree (25 分)
    A1099 Build A Binary Search Tree (30 分)
    A1043 Is It a Binary Search Tree (25 分) ——PA, 24/25, 先记录思路
    A1079; A1090; A1004:一般树遍历
    A1053 Path of Equal Weight (30 分)
    A1086 Tree Traversals Again (25 分)
    A1020 Tree Traversals (25 分)
    A1091 Acute Stroke (30 分)
    A1103 Integer Factorization (30 分)
    A1032 Sharing (25 分)
  • 原文地址:https://www.cnblogs.com/LeeCookies/p/12663366.html
Copyright © 2011-2022 走看看