C++动态创建数组,Java动态创建数组,两者语法上的区别

有时候我们需要根据输入值动态地创建数组,C++和java中语法大致相似,略有些不同,在此记录一下。

一、C++动态创建数组

有直接声明和new关键字创建两种。

int m, n;
cin >> m >> n;

//1.直接声明
int a1[m];
int a2[m][n];

//2.用new关键字创建

//2.1 new创建一维数组,在这里可以直接有列表进行初始化,列表中
//有多少个参数就会初始化多少个数组元素,其余的数组元素不会被初始化
int* c1 = new int[m];
int* c2 = new int[m]();         //两种方式不同见下面
int* c3 = new int[m]{1,2,3};

//2.2 new创建二维数组,其中二维数组不能用 int ** a = new int[m][n]
//需要用一下方式
int** b = new int*[m];
for (int i = 0; i < m;i++)
{
    b[i] = new int[n];
    // b[i] = new int[i+1];   这里也可创建不同大小的第二维数组
}

}


//...
//释放内存
for (int i = 0; i < m;i++)
{
    delete [] b[i];
}
delete [] b;

 1. 直接声明的方式和new关键字创建的区别:

  直接声明的方式创建动态数组时将数组分配到栈区,而new关键字则是将其分配到堆区,由程序员自己管理(详细可以看:C++内存分区

 2. 上面c1和c2声明方式的区别,就我目前的观察来看,没有什么区别,都是调用了默认的构造函数,默认构造函数和构造函数的区别,详见这里

二、Java动态创建数组

Scanner scanner = new Scanner(System.in);
int m = scanner.nextInt();
int n = scanner.nextInt();
int [] c = new int[m];
int [][] a = new int[m][n];
int [][] b = new int[m][];
for(int i=0;i<m;i++)
{
	b[i] = new int[i+1];
}

  值得注意的是java是不能直接定义来创建动态数组的,因为就连java用常量定义数组都是需要用new来定义的,如下。

int [] c = new int[5];
int d[]= {1,2};

  另外,java中没有暴露指针,所以不会有*符号,数组用[]标示,垃圾也会自动回收。

  再者,C++中不能像java一样采用 new int[m][n]的语法,会产生语法错误。

原创文章 26 获赞 33 访问量 1903

猜你喜欢

转载自blog.csdn.net/qq_40765537/article/details/105742276