java 多维数组组的初始化方法

C语言发现(3)
近日阅读别人的代码,发现自己在二维数组的初始化方面存在盲点,遂总结一下,希望其他看到的人能得到一些收获。
一、初始化和赋值的区别:
初始化即在定义二维数组时就赋值,如:int a[2][3]={1,2,3,4,5,6};
而对二维数组赋值最简单的方法(对于新手来说,高手应该有的是方法)就是使用for循环来赋值了,但是for循环赋值是有规律的,若要无规律的赋值,int a[2][3]; a[2][3]={1,2,3,4,5,6}; 是不对的,声明以后a[2][3]只是代表了数组的第三列第四行,不光越界了,而且对单个数据进行数组赋值也是不对的。
总结:如果定义的二维数组中的值是无规律的,最好在定义时就进行初始化,以免引起麻烦,而且若在声明以后进行赋值,只能一个一个赋值。
二、二维数组初始化的几种方式:
1.最易读的方式:
int a[2][3]={{1,2,3},{4,5,6}};
两行三列,一个花括号代表一行,注意每行不能超出自己限定的个数,但若部分行元素个数不足,其余元素会自动初始化为0。
2.偷懒的方式:
int a[2][3]={1,2,3,4,5,6};
这样也会生成一个两行三列的数组,只是数据较多的时候容易漏掉元素。
3.一种省略的形式
int a[][3]={1,2,3,4,5,6};
编译器会自动算出第一维的长度,但是第二维不能省略。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:3245次
排名:千里之外
原创:15篇C++的二维数组定义初始化问题
遇到的问题是:
a[5][5]={{0,1,0,1,1},{1,0,1,1,1},{0,1,0,1,1},{1,1,1,0,1},{1,0,1,1,0}}; 则没有问题;
但分开写成int a[5][5];
a[5][5]={{0,1,0,1,1},{1,0,1,1,1},{0,1,0,1,1},{1,1,1,0,1},{1,0,1,1,0}};
我用VC++6.0和Gcc都运行过,问题一样
后面那个a[5][5]会被当成下标为a[5][5]的元素显然下标就越界了。 一般要在定义的时候赋具体的值,若定义的时候没有赋值也可以,但后面要通过具体访问每一个元素的方式赋值如:
int a[5][5];
for(i=0;i&5;i++)
for(j=0;j&5;j++)
cin&&a[i][j];
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。2016年2月 C/C++大版内专家分月排行榜第三2016年1月 C/C++大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。热门关键字:
> js二维数组定义和初始化三种方法
js二维数组定义和初始化三种方法
作者:管理员发布时间: 20:52:55评论数:0
转载请自觉注明原文:
方法一:直接定义并且初始化,这种遇到数量少的情况可以用
var _TheArray = [["0-1","0-2"],["1-1","1-2"],["2-1","2-2"]]
方法二:未知长度的二维数组
var tArray = new Array();&& //先声明一维
for(var k=0;k&i;k++){ //一维长度为i,i为变量,可以根据实际情况改变
&tArray[k]=new Array(); //声明二维,每一个一维数组里面的一个元素都是一个数组;
for(var j=0;j&p;j++){ //一维数组里面每个元素数组可以包含的数量p,p也是一个变量;
& tArray[k][j]=""; //这里将变量初始化,我这边统一初始化为空,后面在用所需的值覆盖里面的值
给定义的数组传入所需的值
tArray[6][1]=5;//这样就可以将5的值传入到数组中,覆盖初始化的空&
方法三:在这之前,以上两者方法都有问题,方法二,每次定义都初始化了,虽然后面可以动态修改,但是还是不方法
所以我尝试了一种动态传入值到数组的方法&
ps:一些在实践过程中遇到的数组有趣的现象
本来以为二维数组可以像下面这样直接传入值
for(var a=0;a&i;a++){
tArray[a]=(matArray[a],addArray[a]); //matArray[a]和addArray[a]是两个数组,这两个数组直接传入tArray[a]中
结果是tArray[a]中收到的是后面一个数组的值,matArray[a]的内容被忽略的,如果换一个位置,matArray[a]在后面,则传入的是addArray[a]的值。
思考:简单的例子:
var a=[1,2];
b[0]=a;//把数组a作为b数组的元素传入b数组中
alert(b[0][1]);& //2
上面是最简单的二维数组,
上面例子换种写法:
b[0]=[1,2];//把数组[1,2]作为b数组的元素传入b数组中
alert(b[0][1]);& //2&
可以看出上面的b[0]=[1,2]是可以用的
for(var a=0;a&i;a++){
tArray[a]=[ matArray[a],addArray[a] ];& 上面例子中的()修改为[] 就可以成功的组成一个二维数组了
总结:方法三:
for(var a=0;a&i;a++){
tArray[a]=[ aArray[a],bArray[a],cArray[a]]; 还可以增加dArray[a],eArray[a]
这种情况适用于已知几个数组,把他们组合成一个二维数组情况
如果您觉得本文的内容对您的学习有所帮助:
相关文章:奇异:union第一个成员是多维数组,就不能用套嵌括号初始化了 - C语言当前位置:& &&&奇异:union第一个成员是多维数组,就不能用套嵌括奇异:union第一个成员是多维数组,就不能用套嵌括号初始化了&&网友分享于:&&浏览:64次怪异:union第一个成员是多维数组,就不能用套嵌括号初始化了?&&多维数组可以这样初始化:int&mm[2][2]={0,1,2,3};
&&也可以用套嵌括号初始化:int&mm[2][2]={{0,1},{2,3}};
&&问题是,假若union的第一个成员是多维数组mm[2][2]我就只能用第一种方式初始化!第二种方式会报错。不知说清楚没,请看源码:
union&matrix{
int&mm[2][2];
int&mm00,mm01,mm10,mm11;
void&main(void){
union&matrix&m={0,1,2,3};
union&matrix&m1={
&&上面的代码可以过编译,但把注释打开,会报错:
test.c:&In&function&‘main’:
test.c:10:3:&error:&extra&brace&group&at&end&of&initializer
test.c:10:3:&error:&(near&initialization&for&‘m1’)
test.c:10:3:&warning:&excess&elements&in&union&initializer&[enabled&by&default]
test.c:10:3:&warning:&(near&initialization&for&‘m1’)&[enabled&by&default]
不知道这个问题有人遇到过没,为什么就不能用套嵌括号的形式初始化呢?
------解决方案--------------------
1、LZ的定义,其实是
union&matrix&{
&&&&int&mm[2][2];
&&&&int&mm00;
&&&&int&mm01;
&&&&int&mm10;
&&&&int&mm11;
而LZ大概是想定义
union&matrix&{
&&&&int&mm[2][2];
&&&&int&m[4];
2、union的成员,谁在前,就得用该成员对应的初始化方法:
union&matrix&{
&&&&int&mm[2][2];
&&&&int&m[4];
union&matrix&m&=&{{{1,2},{3,4}}};
注意这里括号的数目,最外面的{}是union的,而里面的是mm的initializer
union&matrix&{
&&&&int&m[4];
&&&&int&mm[2][2];
union&matrix&m&=&{{1,2,3,4}};
同样要注意括号的数目,最外面的{}是union的,而里面的是m的initializer
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有

我要回帖

更多关于 java 多维数组 的文章

 

随机推荐