C++和Java多维数组声明和初始化时的区别与常见问题

时间:2022-10-10 21:10:16
//C++只有在用{}进行初始化的时候才可以仅仅指定列数而不指定行数,因为可以通过直接
//初始化时的元素个数自动计算出行数。而仅声明/创建数组而不初始化时,Cpp要求必须写明
//行数和列数才能够创建数组变量,否则会报错说数组创建这一"函数"没有足够的参数。
//但Java由于它自己的底层内存结构组织方式的原因,二维数组可以视为是数组的数组
//第一维数组所包含的每个元素都是指向二维元素即数组的指针,所以必须先说明行数
//指向二维数组的指针就能够随时待命去连接新的数组作为一维数组指针的指向
//(而且这时还只是声明,并不需要使用数组元素,Java除了使用{}直接初始化都用new来开辟内存创建数组且初始化为0)
//C++局部变量数组初始化全部为0只能在声明的时候进行,//:int arr[3] = {0};全局变量则全部直接初始化为0
//int arr[n][m];//C++还可以用上include<cstring>里面的函数memset(arr,0,sizeof arr);//将数组一次性初始化为0的操作
//所以Java必须能够指明行数才能声明多维数组,在使用前必须将所有维度都说明清楚
//两种语言都是行优先的,所以都需要至少指明确定的行数才能对数组进行创建和初始化
//C++
int ddd[][2] = {2,5,5,6};//对
int dd[2][];//报错
int d[][2];//报错
//Java
int [][] arr = new int[3][];//报错