zoukankan      html  css  js  c++  java
  • 数组 在 c++, java, c#中的 定义、初始化 区别 中括号的位置

    来自“http://www.cnblogs.com/Yogurshine/archive/2012/12/29/2839238.html”

    (1)Java

    一维数组 1) int[] a; //声明,没有初始化

    2) int[] a=new int[5]; //初始化为默认值,int型为0   这在 c++中不允许,静态数组在栈中分配内存空间,new在堆中分配

    3) int[] a={1,2,3,4,5}; //初始化为给定值

    4) int[] a=new int[]{1,2,3,4,5}; //同(3) int[] a=new int[5]{1,2,3,4,5}; //错误,如果提供了数组初始化操作,则不能定义维表达式

    5) int[] a; a=new int[5]; //正确,同(2)一样

    int[] a; a={1,2,3,4,5}; //错误,数组常量只能在初始化操作中使用,如(3)

    6) int a[]; a[0]=1; //错误,因为数组没有初始化,不能赋值 a[1]=2;

    二维数组 1) int[][] a; //声明,没有初始化

    2) int[][] a=new int[2][3]; //初始化为默认值,int型为0

    3) int[][] a={{1,2},{2,3},{3,4}}; //初始化为给定值 int[][] a={{1,2},{2,3},{3,4,5}}; //没有错,数组空间不是连续分配的,所以不要求每一维的大小相同

    4) int[][] a=new int[2][]; a[0]=new int[3]; //a[0]其实就是一个数组 a[1]=new int[4]; //每一维的大小可以不一样;

    5) int[][] a=new int[][]{{1,2},{2,3},{3,4,5}}; //同(3) int[] a=new int[5]{{1,2},{2,3},{3,4,5}}; //错误,如果提供了数组初始化操作,则不能定义维表达式

    int[][] a=new int[2][]; a[0]={1,2,3,4,5}; //错误,数组常量只能在初始化操作中使用

    6) int[][] a=new int[2][]; a[0][1]=1; //错误,第二维没有初始化,不能赋值,java.lang.NullPointerException异常

    总结: 1.二维就是数组的数组,里面的数组大小不要求一样

    2.不管一维还是二维,在使用前(赋值,访问)必须初始化,可以用new默认初始化,也可以用数组常量初始化

     

    1.动态初始化:数组定义与为数组分配空间和赋值的操作分开进行; (一般用指针实现动态数组,返回数组首地址)

    2.静态初始化:在定义数字的同时就为数组元素分配空间并赋值;

    3.默认初始化:数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间后,每个元素也被按照成员变量的规则被隐士初始化。

    (2)C#

    数组概述

    C# 数组从零开始建立索引,即数组索引从零开始。C# 中数组的工作方式与在大多数其他流行语言中的工作方式类似。但还有一些差异应引起注意。

    声明数组时,方括号 ([]) 必须跟在类型后面,而不是标识符后面。在 C# 中,将方括号放在标识符后是不合法的语法。

    int[] table; // not int table[];

    另一细节是,数组的大小不是其类型的一部分,而在 C 语言中它却是数组类型的一部分。这使您可以声明一个数组并向它分配 int 对象的任意数组,而不管数组长度如何。

    int[] numbers; // declare numbers as an int array of any size

    numbers = new int[10]; // numbers is a 10-element array

    numbers = new int[20]; // now it's a 20-element array

    声明数组

    C# 支持一维数组、多维数组(矩形数组)和数组的数组(交错的数组)。下面的示例展示如何声明不同类型的数组:

    一维数组:

    int[] numbers; 

    多维数组:

    string[,] names; 

    数组的数组(交错的):

    byte[][] scores; 

    声明数组(如上所示)并不实际创建它们。在 C# 中,数组是对象(本教程稍后讨论),必须进行实例化。下面的示例展示如何创建数组:

    一维数组:

    int[] numbers = new int[5]; 

    多维数组:

    string[,] names = new string[5,4]; 

    数组的数组(交错的):

    byte[][] scores = new byte[5][]; 
    for (int x = 0; x < scores.Length; x++)  
    { 
    scores[x] = new byte[4]; 
    } 

    还可以有更大的数组。例如,可以有三维的矩形数组:

    int[,,] buttons = new int[4,5,3]; 

    甚至可以将矩形数组和交错数组混合使用。例如,下面的代码声明了类型为 int 的二维数组的三维数组的一维数组。

    int[][,,][,] numbers; 
    初始化数组 

    C# 通过将初始值括在大括号 ({}) 内为在声明时初始化数组提供了简单而直接了当的方法。下面的示例展示初始化不同类型的数组的各种方法。

    注意如果在声明时没有初始化数组,则数组成员将自动初始化为该数组类型的默认初始值。另外,如果将数组声明为某类型的字段,则当实例化该类型时它将被设置为默认值 null

    一维数组

    int[] numbers = new int[5] {1, 2, 3, 4, 5}; 
    string[] names = new string[3] {"Matt", "Joanne", "Robert"}; 

    可省略数组的大小,如下所示:

    int[] numbers = new int[] {1, 2, 3, 4, 5}; 
    string[] names = new string[] {"Matt", "Joanne", "Robert"}; 

    如果提供了初始值设定项,则还可以省略 new 运算符,如下所示:

    int[] numbers = {1, 2, 3, 4, 5}; 
    string[] names = {"Matt", "Joanne", "Robert"}; 

    多维数组

    int[,] numbers = new int[3, 2] { {1, 2}, {3, 4}, {5, 6} }; 
    string[,] siblings = new string[2, 2] { {"Mike","Amy"}, {"Mary","Albert"} }; 

    可省略数组的大小,如下所示:

    int[,] numbers = new int[,] { {1, 2}, {3, 4}, {5, 6} }; 
    string[,] siblings = new string[,] { {"Mike","Amy"}, {"Mary","Albert"} }; 

    如果提供了初始值设定项,则还可以省略 new 运算符,如下所示:

    int[,] numbers = { {1, 2}, {3, 4}, {5, 6} }; 
    string[,] siblings = { {"Mike", "Amy"}, {"Mary", "Albert"} }; 

    交错的数组(数组的数组)

    可以像下例所示那样初始化交错的数组:

    int[][] numbers = new int[2][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} }; 

    可省略第一个数组的大小,如下所示:

    int[][] numbers = new int[][] { new int[] {2,3,4}, new int[] {5,6,7,8,9} }; 

    -或-

    int[][] numbers = { new int[] {2,3,4}, new int[] {5,6,7,8,9} }; 

    请注意,对于交错数组的元素没有初始化语法。

    (3)C++

    1.一维数组的定义与初始化
    1.1定义一维数组
    int a[3];
    该定义表示一个整型数组,共有3个元素,下标分别为[0],[1],[2]。
    1.2一维数组初始化
    可以用下面几种方式进行初始化。
    ①在定义数组时分别对数组元素赋初值。
    int a[3]={0,1,2};
    ②只给一部分元素赋值。
    int a[3]={0,1};
    这表示只给前面两个元素赋初值,后面的元素值默认为0。
    ③在对全部数组元素赋初值时,可以不指定数组长度。
    int a[3]={0,1,2};
    可以写成
    int a[]={0,1,2};
    在第二种写法中,花括号中有3个元素,系统就会据此自动定义a数组的长度为3。但若被定义的数组长度与提供初值的个数不相同,则数组长度不能省略。
    2.二维数组的定义与初始化
    2.1定义二维数组
    int a[3][4];
    改定义表示一个3x4(3行4列)的整型数组。可以把该二维数组看作:
    |---a[0]:a[0][0],a[0][1],a[0][2],a[0][3]
    a |--a[1] :a[1][0],a[1][1],a[1][2],a[1][3]
    |--a[2] :a[2][0],a[2][1],a[2][2],a[2][3]
    C++中,二维数组种元素排列的顺序是:按行存放,即在内存中先顺序存放第一行的元素,在存放第二行元素,依次往下。
    2.2二维数组初始化
    可以用下面几种方式进行初始化。
    ①分行给二维数组赋初值。
    int a[3][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}};
    ②将所有数据写在一个花括号内,按数组排列的顺序对各元素赋初值。
    int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
    ③只对部分元素赋初值。
    int a[3][4]={{1},{2},{4}};
    1 0 0 0
    2 0 0 0
    4 0 0 0
    int a[3][4]={{1},{0,2},{0,0,4}};
    1 0 0 0
    0 2 0 0
    0 0 4 0
    int a[3][4]={{1},{3,2}};
    1 0 0 0
    3 2 0 0
    0 0 0 0
    int a[3][4]={{1},{},{9}};
    1 0 0 0
    0 0 0 0
    9 0 0 0
    ④如果对全部元素赋初值,则定义数组时对第一维长度可以不指定,但第二维长度必须指定。
    int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
    可以写成
    int a[][4]={0,1,2,3,4,5,6,7,8,9,10,11};
    在定义时也可以对部分元素赋初值而省略第一维的长度,但应分行赋初值。
    int a[][4]={{0,0,1},{},{0,9}};
    0 0 1 0
    0 0 0 0
    0 9 0 0

  • 相关阅读:
    iOS 将对象的属性和属性值拆分成key、value,通过字符串key来获取该属性的值
    [IOI2005] Riv 河流
    [洛谷P4549] [模板] 裴蜀定理
    [NOIp2013] 货车运输
    [NOIp2015] 运输计划
    18.10.01模拟赛总结
    [洛谷P3369] 普通平衡树 Treap & Splay
    [NOIp2016] 组合数问题
    [洛谷P4777] [模板] 扩展中国剩余定理
    [洛谷P3384] [模板] 树链剖分
  • 原文地址:https://www.cnblogs.com/xaf-dfg/p/3726292.html
Copyright © 2011-2022 走看看