定义_定义数组 - CSDN
精华内容
参与话题
  • 声明和定义的区别

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

    千次阅读 2018-10-31 12:49:03
    只是告诉编译器x是整形,已经在其它地方定义了。 定义 是在内存中确定变量的位置、大小。 初始化 是定义变量时候赋给变量的值(从无到有) 赋值 是以后用到该变量,赋给该变量新的值 int i;//定义 extern int i;...

    前言

    引用性声明 不分配存储空间,如extern int x; 只是告诉编译器x是整形,已经在其它地方定义了。
    定义 是在内存中确定变量的位置、大小。
    初始化 是定义变量时候赋给变量的值(从无到有)
    赋值 是以后用到该变量,赋给该变量新的值

    	int i;//定义
      	extern int i; //声明
    	int i=9;初始化
      	i= 7;// 赋值
    

    变量定义与声明的联系区别

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

    变量的声明有两种情况:

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

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

    声明与定义区别

    声明(declaration ) 指定了一个变量的标识符,用来描述变量的类型,是类型还是对象,或者函数等。声明,用于编译器(compiler)识别变量名所引用的实体。
    以下这些就是声明:

    extern int bar;
    extern int g(int, int);
    double f(int, double); // 对于函数声明,extern关键字是可以省略的。
    class Student                            //类声明        
    { 
    public:
    	void display( );                  
    private:
    	int num; 
    	char name[20];     
    	char sex;                            
    };
    

    定义 是对声明的实现或者实例化。连接器(linker)需要它(定义)来引用内存实体。
    与上面的声明相应的定义如下:

    int bar;
    int g(int lhs, int rhs) {return lhs*rhs;} 
    double f(int i, double d) {return i+d;} 
    
    void Student∷display( )          //类方法定义      
    {
    	cout<<″num:<<num<<endl;          
    	cout<<″name:<<name<<endl; 
    	cout<<″sex:<<sex<<endl;   
    }
    

    无论如何,定义 操作是只能做一次的。如果你忘了定义一些你已经声明过的变量,或者在某些地方被引用到的变量,那么,连接器linker是不知道这些引用该连接到那块内存上的。然后就会报missing symbols这样的错误。如果你定义变量超过一次,连接器是不知道把引用和哪块内存连接,然后就会报 duplicated symbols这样的错误了。以上的symbols其实就是指定义后的变量名,也就是其标识的内存块。

    总结

    如果只是为了给编译器提供引用标识,让编译器能够知道有这个引用,能用这个引用来引用某个实体(但没有为实体分配具体内存块的过程)是为声明。如果该操作能够为引用指定一块特定的内存,使得该引用能够在link阶段唯一正确地对应一块内存,这样的操作是为定义。
    总之一句话: 声明是为了让编译器正确处理对声明变量和函数的引用。定义是一个给变量分配内存的过程,或者是说明一个函数具体干什么用。

    为什么计算机起始时间是1970年1月1日

    1969年8月,贝尔实验室的程序员肯汤普逊利用妻儿离开一个月的机会,开始着手创造一个全新的革命性的操作系统,他使用B编译语言在老旧的PDP-7机器上开发出了Unix的一个版本。随后,汤普逊和同事丹尼斯里奇改进了B语言,开发出了C语言,重写了UNIX,新版于1971年发布。

    那时的计算机操作系统是32位,时间用32位有符号数表示,则可表示 68 年,
    用32位无符号数表示,可表示136年。
    他们认为 以 1970年 为时间 原点 足够可以了。 因此,C 的 time 函数 就这么 定了,后来的 java 等也用它,微机也用它,工作站本来就是unix系统当然也用它。(今后若用64位机年限更没问题。)

    32位能表示的最大值是2147483647,另外1年365天的总秒数是31536000,
    2147483647/31536000
    68.1

    也就是说32位能表示的最长时间是68年,而实际上到2038年01月19日03时14分07
    秒,便会到达最大时间,过了这个时间点,所有32位操作系统时间便会变为
    10000000000000000000000000000000
    也就是1901年12月13日20时45分52秒,这样便会出现时间回归的现象,很多软件便会运行异常了。

    到这里,我想问题的答案己经出来了:

    因为用32位来表示时间的最大间隔是68年,而最早出现的UN以操作系统考虑到计算
    机产生的年代和应用的时限综合取了1970年1月1日作为UNTIME的纪元时间(开始
    时间)
    至于时间回归的现象相信随着64为操作系统的产生逐渐得到解决,因为用64位操作
    系统可以表示到292,277,026,596年12月4日15时30分08秒,相信我们的N代子孙,哪怕地球毁灭那天都不用愁不够用了,因为这个时间己经是千亿年以后了。

    展开全文
  • C语言中变量的声明和定义

    万次阅读 多人点赞 2018-04-02 14:47:42
    变量声明和变量定义变量定义:用于为变量分配存储空间,还可为变量指定初始值。程序中,变量有且仅有一个定义。变量声明:用于向程序表明变量的类型和名字。定义也是声明,extern声明不是定义定义也是声明:当定义...

    变量声明和变量定义


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

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

    • 定义也是声明,extern声明不是定义

    • 定义也是声明:当定义变量时我们声明了它的类型和名字。
    • extern声明不是定义:通过使用extern关键字声明变量名而不定义它。
      [注意]
      变量在使用前就要被定义或者声明。
      在一个程序中,变量只能定义一次,却可以声明多次。
      定义分配存储空间,而声明不会。
       C++程序通常由许多文件组成,为了让多个文件访问相同的变量,C++区分了声明和定义。
    
        变量的定义(definition)用于为变量分配存储空间,还可以为变量指定初始值。在程序中,变量有且仅有一个定义。
    
        声明(declaration)用于向程序表明变量的类型和名字。定义也是声明:当定义变量的时候我们声明了它的类型和名字。可以通过使用extern声明变量名而不定义它。不定义变量的声明包括对象名、对象类型和对象类型前的关键字extern。
    
        extern声明不是定义,也不分配存储空间。事实上它只是说明变量定义在程序的其他地方。程序中变量可以声明多次,但只能定义一次。
    
        只有当声明也是定义时,声明才可以有初始化式,因为只有定义才分配存储空间。初始化式必须要有存储空间来进行初始化。如果声明有初始化式,那么它可被当作是定义,即使声明标记为extern。
    
        任何在多文件中使用的变量都需要有与定义分离的声明。在这种情况下,一个文件含有变量的定义,使用该变量的其他文件则包含该变量的声明(而不是定义)。
    

    如何清晰的区分变量声明和定义


    extern通知编译器变量在其他地方被定义


    1.extern告诉编译器变量在其他地方定义了。

    例如:

    extern int i;       //声明,不是定义
    int i;              //声明,也是定义,未初始化

    带有初始化式的声明必定式定义


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

    例如:

    extern double pi=3.141592654;  //定义

    函数的声明和定义


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

    例如:

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

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


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

    例如:

    extern int i; //声明
    int i; //定义          

    程序模块化设计风格


    概要


    1. 不要把变量定义放入.h文件,这样容易导致重复定义错误。
    
    永远不要在.h文件中定义变量。定义变量和声明变量的区别在于定义会产生内存分配的操作,是汇编阶段的概念;而声明则只是告诉包含该声明的模块在连接阶段从其它模块寻找外部函数和变量
    
    2. 尽量使用static关键字把变量定义限制于该源文件作用域,除非变量被设计成全局的。
    
    3. 可以在头文件中声明一个变量,在用的时候包含这个头文件就声明了这个变量。

    模块化要点


     (1) 模块即是一个.c文件和一个.h文件的结合,头文件(.h)中是对于该模块接口的声明;
    
    (2) 某模块提供给其它模块调用的外部函数及数据需在.h中文件中冠以extern关键字声明;
    
    (3) 模块内的函数和全局变量需在.c文件开头冠以static关键字声明;
    
    (4) 永远不要在.h文件中定义变量!定义变量和声明变量的区别在于定义会产生内存分配的操作,是汇编阶段的概念;而声明则只是告诉包含该声明的模块在连接阶段从其它模块寻找外部函数和变量。
    

    一般情况下头文件中只放变量的声明,因为头文件要被其他文件包含(即#include),如果把定义放到头文件的话,就不能避免多次定义变量,C++不允许多次定义变量,一个程序中对指定变量的定义只有一次,声明可以无数次。

    不过有三个例外,一下三中实体的定义也可放到头文件中。

    1.值在编译时就已知的const 变量的定义可以放到头文件中
    如:const int num(10);
    2.类的定义可以放到头文件中
    3.inline 函数
    

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

    示例程序


    #include <stdio.h>
    #include <stdlib.h>
    
    //  是定义,定义了A为整型的外部变量
    //  C中定义的变量默认就是extern的,
    //  因此一般来说int a = 10 <==> extern int a = 10;
    /*extern */int a = 10;
    //如果声明有初始化式,就被当作定义,即使前面加了extern。
    //只有当extern声明位于函数外部时,才可以被初始化。
    
    int main(void)
    {
        extern int  a;           //  声明一个外部extern的int型变量a
        //  这是个声明而不是定义,声明A是一个已经定义了的外部变量
        //  注意:声明外部变量时可以把变量类型去掉如:extern a;
        printf("a = %d\n", a);
    
    
    
        return EXIT_SUCCESS;
    }
    

    这里写图片描述

    在这个程序中,我们再函数外部定义了一个变量
    注extern int a = 10;只有当extern声明位于函数外部时,才可以被初始化。
    我们后面还会提到这个问题

    #include <stdio.h>
    #include <stdlib.h>
    
    
    
    int main(void)
    {
        int a;                  //  定义一个变量, 不初始化
        int b = 10;             //  定义一个变量, 同时进行初始化
        extern int  c;          //  声明一个外部extern的int型变量a
    
        printf("a = %d\n", a);
        printf("b = %d\n", b);
        printf("c = %d\n", c);
    
        extern int d = 10;
    
    
        return EXIT_SUCCESS;
    }
    

    在这个程序中,

    int a;是个定义,但是未初始化,打印他的值式不确定的,因此编译时会报未初始化的异常。

    int b = 10; 是个定义,并且被正确初始化,打印b的值没有问题。

    这里写图片描述

    但是是个声明,如果要对c进行读写操作,而我们并没有对c进行定义,因此语法检查没有问题,但是在链接时,连接器会找不到c的地址。

    这里写图片描述

    对于d再明显不过了,前面我们提到过如果声明有初始化式,就被当作定义,即使前面加了extern。但是只有当extern声明位于函数外部时,才可以被初始化。

    现在这个定义很明显被gcc编译器认为是错误的。

    这里写图片描述

    点击打开链接 点击打开链接 点击打开链接

    展开全文
  • 原根的定义

    千次阅读 2019-10-11 21:15:30
    原根的定义: 原根,是一个数学符号。设m是正整数,a是整数,若a模m的阶等于φ(m),则称a为模m的一个原根。 1. 原根的定义 设m是正整数,a是整数,若a模m的阶等于φ(m),则称a为模m的一个原根。(其中φ(m)表示m...

    下面的图片来自:百度百科

    原根的定义: 

    原根,是一个数学符号。设m是正整数,a是整数,若a模m的阶等于φ(m),则称a为模m的一个原根。

    1. 原根的定义
    设m是正整数,a是整数,若a模m的阶等于φ(m),则称a为模m的一个原根。(其中φ(m)表示m的欧拉函数)
    假设一个数g对于P来说是原根,那么g^i mod P的结果两两不同,且有 1<g<P, 0<i<P,那么g可以称为是P的一个原根,归根到底就是g^(P-1) = 1 (mod P)当且仅当指数为P-1的时候成立。(这里P是素数)。

    简单来说,g^i mod p ≠ g^j mod p (p为素数)
    其中i≠j且i,j介於1至(p-1)之间,则g为p的原根。
    求原根目前的做法只能是从2开始枚举,然后暴力判断g^(P-1) = 1 (mod P)是否当且当指数为P-1的时候成立,而由于原根一般都不大,所以可以暴力得到。
    2. 原根的性质
    (1)可以证明,如果正整数(a,m) = 1和正整数 d 满足a^d≡1(mod 7),则 d 整除 φ(m)。因此Ordm(a)整除φ(m)。在例子中,当a= 3时,我们仅需要验证 3 的 1 、2、3 和 6 次方模 7 的余数即可。
    (2)记δ = Ordm(a),则a^1,……a^(δ-1)模 m 两两不同余。因此当a是模m的原根时,a^0,a^1,……a^(δ-1)构成模 m 的简化剩余系。
    (3)模m有原根的充要条件是m= 1,2,4,p,2p,p^n,其中p是奇质数,n是任意正整数。
    (4)对正整数(a,m) = 1,如果 a 是模 m 的原根,那么 a 是整数模n乘法群(即加法群 Z/mZ的可逆元,也就是所有与 m 互素的正整数构成的等价类构成的乘法群)Zn的一个生成元。由于Zn有 φ(m)个元素,而它的生成元的个数就是它的可逆元个数,即 φ(φ(m))个,因此当模m有原根时,它有φ(φ(m))个原根。 

    原根的解释与求解:https://blog.csdn.net/zhouyuheng2003/article/details/80163139#comments

    展开全文
  • 计算机操作系统-操作系统的定义

    千次阅读 2019-01-15 09:31:20
    计算机系统的层次结构 用户 应用程序 操作系统 ...从操作系统层往两侧看:负责管理协调硬件、软件等计算机资源的工作...定义 Operating System是指控制和管理整个计算机系统的硬件和软件资源,并合理地组...
  • PCIe 接口 引脚定义 一览表

    万次阅读 2015-01-16 16:14:14
  • HTML5 标签大全

    万次阅读 多人点赞 2016-09-07 17:22:34
    基础 标签 描述   定义文档类型。 定义 HTML 文档。 ...定义文档的标题。...定义文档的主体。...定义 HTML 标题。...定义段落。...定义简单的折行。...定义水平线。...定义
  • 结构体定义的几种方式

    万次阅读 多人点赞 2017-10-07 10:41:26
    共计有三种形式,还有一种是typedef定义结构体
  • C语言定义数组的几种形式

    万次阅读 2020-01-15 08:51:03
    在c语言中数组经常需要用到,如何定义数组的形式,有哪些定义的方式。 参考自:C语言定义数组的几种形式 备忘。
  • 行内元素与块级元素比较全面的区别和转换

    万次阅读 多人点赞 2012-07-13 10:55:26
    引言  一次偶然的面试遇到的题目,虽然当时知道块级元素和行内元素的区别,但是没有仔细去想。...定义列表中定义条目 定义文档中的分区或节 定义列表 定义列表中的项目
  • 定义和声明的区别

    万次阅读 2017-12-07 17:12:10
    对于变量来说,定义就是声明.  例如: int a; 我们可是说它是定义也可以说它是声明。  但是对于函数来说定义和声明完全不是一回事 。  void sum(int a,int b);这是函数的声明  void sum(int a,int b)  { ...
  • C语言定义结构体的几种方法

    万次阅读 多人点赞 2018-07-24 19:11:43
    1. 先定义结构体类型,再定义结构体变量。 struct student{ char no[20]; //学号 char name[20]; //姓名 char sex[5]; //性别 int age; //年龄 }; struct student stu1,stu2; //此时stu1,s...
  • 编译错误类型: 必须定义入口点

    万次阅读 热门讨论 2016-05-12 11:14:19
    LINK : fatal error LNK1561: 必须定义入口点 # 经常有同学写完程序编译时会发现有这样的错误: LINK : fatal error LNK1561: 必须定义入口点; # 我发现有这样两种情况下会发生这样的错误(都是自己犯过的)...
  • HTML标识符

    万次阅读 2015-11-07 13:18:07
    HTML入门是非常容易的,不需要任何基础,这只是一个网页相当于呈现给用户观看的界面,具体怎么处理数据还需要调用CGI脚本或者JAVA脚本。 一下是一些前辈们写的加上自己的总结。 保存文本的后缀是.htm或者....
  • C语言中声明和定义详解

    万次阅读 多人点赞 2016-02-06 16:57:19
    变量声明和变量定义 变量定义:用于为变量分配存储空间,还可为变量指定初始值。程序中,变量有且仅有一个定义。 变量声明:用于向程序表明变量的类型和名字。 定义也是声明,extern声明不是定义 定义也是...
  • C语言结构体定义的几种方法

    万次阅读 多人点赞 2018-03-08 17:35:18
    什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针...结构体的定义:C语言结构体类型的定义模板大概为:struct 类型名{
  • Java中定义常量几种方式

    万次阅读 2017-08-20 22:51:18
    在开发中定义常量是很常见的事,但常量定义有哪几种方式可选?各种定义方式有什么优缺点?咱们就用这篇小文来梳理下^_^ 1.通过接口Interface来定义(不推荐) 定义方式如下: 我们可以这样使用它...
  • Visual Studio Code F12转到定义显示未定义

    万次阅读 热门讨论 2018-03-22 10:23:02
    VSCode F12转到定义无效。 显示未定义Visual Studio Code这周一直不能使用F12,简直要疯啊。重装之后莫名其妙的源代码管理修好了。但还是不能转到定义最后。在GitHub的issue上找到了类似...
  • less学习变量的定义(1)

    万次阅读 2014-11-25 08:03:39
    less 文件内容 @charset "utf-8";...//定义变量 @test-width:200px; @test-height:300px; //定义样式 .testDiv{ width:@test-width; height:@test-height; background-color: aquamarine; }
  • C语言中定义结构体的几种方法

    万次阅读 2013-09-21 12:11:18
    结构体类型变量的定义与其它类型的变量的定义是一样的,但由于结构体类型需要针对问题事先自行定义,所以结构体类型变量的定义形式就增加了灵活性,共计有三种形式,分别介绍如下: 1) 先定义结构体类型,再定义...
1 2 3 4 5 ... 20
收藏数 7,226,344
精华内容 2,890,537
关键字:

定义