(资料图)
我试了一下 编译也是错误的 加0是对的 ;我想应该是 二维数组的初始化的时候 你既然定义了两行两列的矩阵 如果a[2][2]={{2},{0}}系统是默认后面以0来代替数据 如:2 0 0 0 但是如果是a[2][2]={{2},{}}系统不会默认用0代替其他数据 会报错
不清楚你要实现什么。a[0][30]=这个是给二维数组中a[0][30]这一个元素赋值 它是字符类型的不能实现你上面的赋值。
是对的。char *[]相当于一个二维数组。后面的赋值表示将每个字符串赋值为空
首先要明确数组的在计算机的分配方式。计算机会分配一块《连续》的内存给数组来使用,这样就可以通过《下标》很方便的访问数组的元素。因此数组的长度就一定是要固定的,因为内存是一直在动态的分配和释放的,如果数组的长度不固定,那么数组后面的内存到底还要不要分配给别人。如果分配了,数组忽然要增加,那数组内存就不能是连续的了。所有定义数组时可以省略的字段都是因为可以确定长度,才可以省略。不是说一维数组不能省略长度,当对数组中所有元素都初始化的时候是可以省略的。比如inta[]={1,2,3,4,5},这么一定可以省略长度,因为数组长度固定是5了。而二维数组,当不初始化数组中的任何一个元素时,行列都需要制定,这样才能确定数组的大小。当初始化了其中的元素时,约定制定列数,就可以通过初始化的元素个数,算出最小的行数。但是行列都不制定就不可以了,比如我初始化了6个元素,即可以是a[2][3]也可以是a[3][2]也可以是a[1][6],会发生歧义,是不允许的。所以二维数组的初始化必须制定一个,至于只必须制定行还是必须制定列,再C语言定义的时候大家预定俗成了制定列,所以就延续下来了。
声明时给初始值叫初始化。例如:int b[3][4]={1,2,3,4,5,6,7,8,4,4,4,4};声明后赋值,可以用赋值语句,b[0][0]=1; b[0][1]=2; b[0][2]=3; b[0][3]=4;b[1][0]=5; b[1][1]=6; b[1][2]=7; b[1][3]=8;b[2][0]=4; b[2][1]=4; b[2][2]=4; b[2][3]=4;数据量大时,则用数据文件,用输入语句读入数值。函数传递也可以:void a1(int *a){int b[3][4]={1,2,3,4,5,6,7,8,4,4,4,4}; // 数据在 b[3][4]中int i,j;for (j=0;j<3;j++)for (i=0;i<4;i++)a[j*4+i]=b[j][i];} main(){int a[3][4];int i,j;a1(&a[0][0]); // 把2维数组a[][] 看成1维,数组元素顺序排列for (j=0;j<3;j++){for (i=0;i<4;i++) printf("%3d ",a[j][i]); // 输出获得的数值printf("\n");}return 0;}
Copyright@ 2015-2022 百科大全版权所有 备案号:豫ICP备2021032478号-16 联系邮箱:89 71 80 9@qq.com