• 补充:数组java与c++的异同


    首先得记住一点:Java中的数组,是个对象。也就是说,你不能声明一个数组,你只能声明一个指针。这个指针指向一个对象,这个对象代表一个数组。

    Java代码中的如下声明:

    int  students[];

    相当于C++代码:

     

    即声明了一个指向数组对象的指针,数组元素为int。

    其中Array为用户自定义类型,模板参数代表元素类型:

     

    数组元素可以是int:

     

    可以是指向对象的指针:

     

    还可以是指向另一个数组对象的指针

     

     

    以上这些C++代码,在Java中有更简洁的写法,如下:

     

    或者如下形式:

    int  students1[];

    Student  students2[];

    int  students[][];

    Student  students4[][];

    声明指向数组对象的指针时,可以不管数组中包含的元素个数(即便指定了,也是聋子的耳朵),但真的产生数组时,必须指定元素个数:

     

    这就相当于C++中

     

    声明的时候不需要指定元素个数:

     

    真正产生的时候需要指定元素个数:

     

    为什么我们上面用C++来解释Java代码时,用了用户自定义的类Array?C++不是本身就有数组吗?

    C++本身的数组,声明跟创建分不开——声明时即创建。

     

    除非是做函数的形参

     

    此时元素个数写跟不写一个样

     

    但这种写法其实就是下边这种写法

     

    即students7的真实类型不是指向数组的指针(在Java中,这样写students7就是指向数组的指针),而是指向数组第一个元素的指针。C++的数组看上去跟Java的数组一模一样,但其实,差别大了。

    我觉得C++从C语言那里继承的历史包袱——用指向数组第一个元素的指针代表指向整个数组的指针的做法,真是lowB到家了。如同用指向链表第一个结点的指针代表整个链表这个数据结构一样lowB。

    lowB:low  Byte

    关于C语言数组指向数组第一个元素的指针的关系:decay的概念

  • 相关阅读:
    《C++ Primer》学习笔记第2章 变量和基本类型
    Java学习笔记类的继承与多态特性
    Java的冒泡排序问题
    新起点,分享,进步
    MVC2中Area的路由注册实现
    了解一下new关键字实现阻断继承的原理
    利用Bing API开发的搜索工具(MVC+WCF)
    ASP.NET MVC中错误处理方式
    const和readonly内部区别
    WCF中校验参数的实现方式(一)
  • 原文地址:https://www.cnblogs.com/dr-xsh/p/12511881.html
Copyright © 2020-2023  润新知