精华内容
下载资源
问答
  • 声明和定义区别

    万次阅读 多人点赞 2019-01-10 13:21:07
    声明和定义区别: 在我上课的书中并没有说明两者的区别,书上写着“在本书中,声明和定义有着相同的含义”,当时学的时候也没注意到这点,后来看到一些面试题,才注意到这些坑。  一种是需要建立存储空间的。...
    1.  声明和定义的区别:

    在我上课的书中并没有说明两者的区别,书上写着“在本书中,声明和定义有着相同的含义”,当时学的时候也没注意到这点,后来看到一些面试题,才注意到这些坑。

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

     

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


      声明是向编译器介绍名字--标识符。它告诉编译器“这个函数或变量在某处可找到,它的模样象什么”。

      而定义是说:“在这里建立变量”或“在这里建立函数”。它为名字分配存储空间。无论定义的是函数还是变量,编译器都要为它们在定义点分配存储空间。

      对于变量,编译器确定变量的大小,然后在内存中开辟空间来保存其数据,对于函数,编译器会生成代码,这些代码最终也要占用一定的内存。

      总之就是:把建立空间的声明成为“定义”,把不需要建立存储空间的成为“声明”。

      基本类型变量的声明和定义(初始化)是同时产生的;而对于对象来说,声明和定义是分开的。

     

    例如:类A

      如果A a;就是一个声明,告诉编译器a是A类的一个对象变量,但是不进行初始化;

      如果以后a=new A();这就是初始化,分配了空间。

      需要注意的是我们声明的最终目的是为了提前使用,即在定义之前使用,如果不需要提前使用就没有单独声明的必要,变量是如此,函数也是如此,所以声明不会分配存储空间,只有定义时才会分配存储空间。

      定义和声明的具体区别

      所谓定义就是(编译器)创建一个对象,为这个对象分配一块内存,并给它取上一个名字,这个名字就是就是我们经常所说的变量名或对象名。

      声明有2重含义:

      (1) 告诉编译器,这个名字已经匹配到一块内存上,下面的代码用到变量或者对象是在别的地方定义的。声明可以出现多次。

      (2) 告诉编译器,这个名字已经被预定了,别的地方再也不能用它来作为变量名或对象名。


     

     

    ● 对“定义”的解释:

    在java语言中变量或常量的基本定义方式为:

    类 变量名= new类();

    基本数据类型 变量名 = 值;

    举个例子,描述用户的类User:

    public class User {

        private String  name;

        private Integer age;

    }

    现在定义一个变量名为user的User类的对象:User user = new User();

     

    当然我们也可以在基本定义方式上增加修饰符:private、public等,也可以在()传入构造函数的参数;

    这里需要说明的是:Java的数据类型有基本数据类型(数值型、字符型、布尔型)引用数据类型(类、接口、数组)

    其实上面这个基本的变量定义方式包含了4个动作:变量的声明、引用、创建、初始化

     

    ● 对“声明”的解释:

    变量的声明方式:User user;声明的特点是该变量user并没有引用,系统会给它一个默认的引用:null;

     

    ● 对“引用”的解释:

    变量名 = 对象;这个=的过程就是引用;

    例:User user2 = user;

    这引用表示:变量user2引用的对象与user引用的对象为同一个。

     

    ● 对“创建”的解释

    new 类();这个new的动作即为创建对象;

     

    ● 对“赋值”的解释

    赋值的概念其实基本同引用,所不同是赋值是针对基本数据类型的叫法引用是针对引用数据类型来讲。

    例:int n = 100;

    定义一个int 类型的变量 n并赋值为100;

     

    ● 对“初始化”的解释

    在变量定义时的赋值或引用即为初始化,也可以理解为第一次赋值或引用的过程。

     

    通过上面的解释我们再来回答这个基础的面试题:

    以下几种定义变量的方式有什么分别?:

    1、  String str;

    2、  String str=Null;

    3、  String str="";

    4、  String str="abc";

    5、  String str= new ("abc")

    1、  声明了一个变量名为str的类String的变量;

    2、  声明了一个变量名为str的类String的变量,它的初始化引用为空;

    3、  声明了一个变量名为str的类String的变量,它的初始化引用为一个值是""(空串)的String对象;

    4、  声明了一个变量名为str的类String的变量,它的初始化引用为一个值是"abc"的String对象;

    5、  声明了一个变量名为str的类String的变量,它的初始化引用为一个新创建的值是"abc"的String对象;

     

    1和2的区别在于:2如果是在局部变量的情况下会报编译错误:the local variable b may not have been initialized(局部变量没有被初始化)

    2和3的区别在于2的引用是空,也就是在堆(heap)内存中无对应的内存空间,3是指向一个在堆内存中值为“”的一个内存空间;

    3和4的区别在于引用对象不同,不同对象对应的内存空间不同;

    但是如果:

    String a = "", b = "";

    String c = "abc"; d = "abc";

    这时侯a和b引用的内存地址为同一个,c和d引用的内存地址也为同一个;

    这是因为在 =(引用)的过程中,系统会在堆(heap)内存的变量池中查找是否有内存空间存储对象值为"abc"的内存空间,有则引用这个空间。

    5与4的别区在于在通过new关键字,系统不会判断堆(heap)内存是否存在相同对象的内存空间,而是直接新申请内存空间创建一个新的对象。

     

    展开全文
  • 【C/C++面试必备】声明和定义区别

    千次阅读 多人点赞 2021-07-16 07:25:44
    ???? 作者:Linux猿 ???? 简介:CSDN博客专家?...,C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊!...三、声明和定义区别 3.1 声明/定义次数 3.2 分配内存 3.3 做了什么 本文来介绍一下声明和定义

    🎈 作者:Linux猿

    🎈 简介:CSDN博客专家🏆,C/C++、面试、刷题、算法尽管咨询我,关注我,有问题私聊!

    🎈 关注专栏:C/C++面试通关集锦 (优质好文持续更新中……)🚀


    目录

    一、变量的声明和定义

    1.1 声明

    1.2 定义

    1.3 区分定义和声明

    二、函数的声明和定义

    2.1 函数声明

    2.2 函数定义

    2.3 函数声明和定义区分

    三、声明和定义的区别

    3.1 声明/定义次数

    3.2 分配内存

    3.3 做了什么


    本文来介绍一下声明和定义的区别,本文中的程序以 C/C++ 为例进行说明。

    一、变量的声明和定义

    1.1 声明

    声明是用来告诉编译器变量的名称和类型,而不分配内存。

    例如:

    extern int var; // 声明
    
    extern int ble =10; // 定义
    
    typedef int INT; // 声明
    
    struct Node; // 声明

    上面代码中,语句 extern int var;表示 var 在别的文件中已经定义,提示编译器遇到此变量时在其它模块中寻找其定义。语句 extern int ble = 10;表示定义了变量 ble,这一点需要注意。

    注意:即使是 extern ,如果给变量赋值了,就是定义了。

    1.2 定义

    定义是为了给变量分配内存,可以为变量赋初值。

    注意:全局变量或静态变量初始值为0,局部变量初始化为随机值。

    在 C/C++ 中,变量的声明和定义区别并不大,定义和声明往往是同时发生,变量定义时,会根据变量类型分配空间,如下所示:

    int value ; //声明 + 定义
    
    struct Node { // 声明 + 定义
        int left;
        int right;
    }; 

    上面代码中,变量名为 value,类型为 int ,分配 4 字节的内存(不同编译器会有差异)。

    1.3 区分定义和声明

    通常变量的定义和声明是同时发生的,注意:extern 变量类型 变量名 仅是声明。

    二、函数的声明和定义

    2.1 函数声明

    函数的声明是通知编译器函数名称、参数数量和类型以及函数返回类型,例如:

    int Max(int x, int y);

    在上面的代码中,函数名为 Max,返回类型为 int 、参数为 int x,int y

    2.2 函数定义

    函数的定义是为函数分配内存,例如:

    int Max(int x, int y) {
    
    return x > y ? x : y;
    
    }

    函数定义包含了函数的具体实现。 

    2.3 函数声明和定义区分

    函数只要有实现(存在函数体 { …… } )即为定义,否则为声明。可以这样理解:函数声明是说明函数是什么,函数定义是说明函数做什么。

    三、声明和定义的区别

    3.1 声明/定义次数

    变量/函数可以声明多次,变量/函数的定义只能一次。

    3.2 分配内存

    声明不会分配内存,定义会分配内存。

    3.3 做了什么

    声明是告诉编译器变量或函数的类型和名称等,定义是告诉编译器变量的值,函数具体干什么。


    🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬


    展开全文
  • 变量声明和定义区别

    千次阅读 2016-06-24 11:24:17
    变量声明和定义区别我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点对...

    变量声明和定义的区别

    我们在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事,下面我就简单的把他们的区别介绍如下:(望我的指点对你受益)

    变量的声明有两种情况:

    1、一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。
    2、另一种是不需要建立存储空间的。 例如:extern int a 其中变量a是在别的文件中定义的。

    前者是“定义性声明(defining declaration)”或者称为“定义(definition)”,而后者是“引用性声明(referncing declaration)”,从广义的角度来讲声明中包含着定义,即定义是声明的一个特例,所以并非所有的声明都是定义,例如:int a 它既是声明,同时又是定义。然而对于 extern a 来讲它只是声明不是定义。一般的情况下我们常常这样叙述,把建立空间的声明称之为“定义”,而把不需要建立存储空间的声明称之为“声明”。很明显我们在这里指的声明是范围比较窄的,即狭义上的声明,也就是说非定义性质的声明,例如:在主函数中:

    int main() {
    extern int A;
    //这是个声明而不是定义,声明A是一个已经定义了的外部变量
    //注意:声明外部变量时可以把变量类型去掉如:extern A;
    dosth(); //执行函数
    }
    int A; //是定义,定义了A为整型的外部变量

    外部变量的“定义”与外部变量的“声明”是不相同的,外部变量的定义只能有一次,它的位置是在所有函数之外,而同一个文件中的外部变量声明可以是多次的,它可以在函数之内(哪个函数要用就在那个函数中声明)也可以在函数之外(在外部变量的定义点之前)。系统会根据外部变量的定义(而不是根据外部变量的声明)分配存储空间的。对于外部变量来讲,初始化只能是在“定义”中进行,而不是在“声明”中。所谓的“声明”,其作用,是声明该变量是一个已在后面定义过的外部变量,仅仅是为了“提前”引用该变量而作的“声明”而已。extern 只作声明,不作任何定义。

    (我们声明的最终目的是为了提前使用,即在定义之前使用,如果不需要提前使用就没有单独声明的必要,变量是如此,函数也是如此,所以声明不会分配存储空间,只有定义时才会分配存储空间。)

    用static来声明一个变量的作用有二:

    (1)对于局部变量用static声明,则是为该变量分配的空间在整个程序的执行期内都始终存在。

    (2)外部变量用static来声明,则该变量的作用只限于本文件模块。

    原博文地址:http://www.cnblogs.com/GavinDai/archive/2011/10/24/2222735.html

    展开全文
  • C++声明和定义区别

    千次阅读 2018-09-02 15:05:46
    定义也是声明:当定义变量时我们声明了它的类型名字。 ④extern关键字:通过使用extern关键字声明变量名而不定义它。   1.定义也是声明,extern声明不是定义,即不分配存储空间。extern告诉编译器变量在其他...

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

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

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

    ④extern关键字:通过使用extern关键字声明变量名而不定义它。

     

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

    例如:extern int i; //声明,不是定义

                 int i; //声明,也是定义           

     

    2.如果声明有初始化式,就被当作定义,即使前面加了extern。只有当extern声明位于函数外部时,才可以被初始化。

    例如:extern double pi=3.1416;  //定义

     

    3.函数的声明和定义区别比较简单,带有{ }的就是定义,否则就是声明。

    例如:extern double max(double d1,double d2);  //声明

     

    4.除非有extern关键字,否则都是变量的定义。

    例如:extern int i; //声明

                 int i; //定义          

     

     

    程序设计风格:

        1. 不要把变量定义放入.h文件,这样容易导致重复定义错误。

        2. 尽量使用static关键字把变量定义限制于该源文件作用域,除非变量被设计成全局的。

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

     

    总结:

    变量在使用前就要被定义或者声明。

    在一个程序中,变量只能定义一次,却可以声明多次。

    定义分配存储空间,而声明不会。

     

    C++程序通常由许多文件组成,为了让多个文件访问相同的变量,C++区分了声明和定义。

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

            声明(declaration)用于向程序表明变量的类型和名字。定义也是声明:当定义变量的时候我们声明了它的类型和名字。可以通过使用extern声明变量名而不定义它。不定义变量的声明包括对象名、对象类型和对象类型前的关键字extern。

            extern声明不是定义,也不分配存储空间。事实上它只是说明变量定义在程序的其他地方。程序中变量可以声明多次,但只能定义一次。

            只有当声明也是定义时,声明才可以有初始化式,因为只有定义才分配存储空间。初始化式必须要有存储空间来进行初始化。如果声明有初始化式,那么它可被当作是定义,即使声明标记为extern。

            任何在多文件中使用的变量都需要有与定义分离的声明。在这种情况下,一个文件含有变量的定义,使用该变量的其他文件则包含该变量的声明(而不是定义)。

     

     

     

    展开全文
  • C语言中声明和定义区别

    千次阅读 2017-10-17 12:41:22
    声明指定了一个变量的标识符,用来...变量的声明和定义: int a;//需要建立存储空间 既是定义,也是声明 extern int a;//不需要建立存储空间 只是声明,不是定义 如果声明有初始化,就被当作定义,即使前面有exter
  • 变量定义和变量声明区别

    千次阅读 2016-01-19 13:34:05
    变量声明 变量定义 区别
  • C语言定义和声明区别

    千次阅读 2013-09-25 19:45:06
    由于,函数是具有全局外部特性,并且函数的定义和声明区别是很明显的。其声明需要返回值类型,函数名参数列表。而函数的定义需要函数体。所以,很容易区别函数的声明和定义。对于变量的声明和定义,就不是那么明显...
  • 简单地说下函数以及结构体的声明(说明)定义区别,避免混淆。 函数的声明和定义区别: 函数声明: 返回类型 函数名(参数类型1 参数名1,·····,参数类型n 参数名n); 如:int fun(int a, int b);...
  • java定义和声明区别

    千次阅读 2018-01-04 17:07:50
     定义和声明定义区别 1、一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。 2、另一种是不需要建立存储空间的。 例如:extern int a 其中变量a是在别的文件中定义的。 声明是向...
  • 定义和声明区别

    万次阅读 多人点赞 2017-12-03 19:44:22
     但是对于函数来说定义和声明完全不是一回事 。  void sum(int a,int b);这是函数的声明  void sum(int a,int b)  {  }  整体是函数的定义 ,函数的定义没有分号 而且要加上一对花括号 ,里边是函
  • C语言 变量声明和定义区别

    千次阅读 2015-03-05 15:07:12
    变量的声明有两种情况: 1、一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。 2、另一种是不需要建立存储空间的。 例如:extern int a 其中变量a是...前者是“定义声明(defining dec
  • 变量的声明和定义有什么区别1.为变量分配地址存储空间的称为定义,不分配地址的称为声明。2.一个变量可以在多个地方声明,但是只在一个地方定义。加入extern修饰的是变量的声明,说明 此变量将在文件以外或在文件...
  • c语言中声明和定义区别

    千次阅读 2017-02-10 14:40:28
    1、声明(declaration )指定了一个变量的标识符,用来描述变量的类型,是类型还是对象,或者函数等。声明,用于编译器(compiler)识别变量名所引用的实体。以下这些就是声明: extern int bar; extern int g...
  • [C/C++] C++声明和定义区别

    千次阅读 2019-05-30 15:04:05
    ·定义也是声明:当定义变量时我们声明了它的类型名字。 ·extern关键字:通过使用extern关键字声明变量名而不定义它。 1.定义也是声明,extern声明不是定义,即不分配存储空间。extern告诉编译器变量在其他地方...
  • extern关键字(声明和定义区别

    千次阅读 2019-02-17 15:34:47
    extern关键字 extern是计算机语言中的一个关键字,可置于变量或者函数前,以表示变量或者函数的定义在别的文件中。提示编译器遇到此变量或函数时,在其它模块中寻找其定义,另外,...谨记:声明可以多次,定义只能一...
  • 一直很迷惑C语言中的声明和定义的有些实践中的用法,说迷惑实践是因为声明和定义的概念上的区别是很明确的。 定义和声明区别(主要针对变量): 定义是要为变量分配存储空间,还可以在定义的时候为变量指定初始...
  • 为变量分配地址存储空间的称为定义,不分配地址的称为声明。一个变量可以在多个地方声明,但是只能在一个地方定义。加入extern修饰的是变量的声明,说明此变量将在文件以外或在文件后面部分定义。 说明:很多时候...
  • C++ 声明定义区别

    千次阅读 2017-07-21 15:35:47
    一,声明定义区别 声明是将一个名称引入程序。定义提供了一个实体在程序中的唯一描述,涉及到内存空间的分配以及初始值的设定。声明和定义有时是同时存在的。 1,定义也是声明,extern声明不是定义,即不分配...
  • C语言中变量声明和变量定义区别

    千次阅读 2019-04-24 10:11:49
    本文转载至CSDN博客JeanCheng 变量声明和变量定义 变量定义:用于为变量分配存储空间,还... 定义也是声明:当定义变量时我们声明了它的类型名字。 extern声明不是定义:通过使用exte...
  • C语言中声明和定义详解

    万次阅读 多人点赞 2016-02-06 16:56:05
    变量声明和变量定义 变量定义:用于为变量分配存储空间,还可为变量指定初始值。程序中,变量有且仅有一个定义。 变量声明:用于向程序表明变量的类型名字。 定义也是声明,extern声明不是定义 定义也是...
  • extern 关键字 声明和定义区别

    千次阅读 2013-08-17 16:40:03
    extern实际上就两种用法,就是后面加不加C 一,后面加C如: extern "C" void fun(int a, int b);就是告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而...就是声明的这个变量或函数在在其他文件中可见,
  • C语言变量定义和声明区别

    千次阅读 2019-04-24 16:13:19
    变量的声明有两种情况 (1) 一种是分配内存空间的(声明)。例如:int a在声明的时候就已经分配了内存空间...可以理解为声明中包含着定义,但是并非所有的声明都是定义,例如:int a既是声明,同时又是定义。然而对于ext...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 552,455
精华内容 220,982
关键字:

声明和定义的区别