您的位置:首页 > 编程语言 > C语言/C++

Java、C#、C++定义数组区别

2015-04-22 10:48 253 查看
(1)Java

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

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

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

原文链接:http://www.cnblogs.com/Yogurshine/archive/2012/12/29/2839238.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: