首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于二维数组的定义,恳请前辈们帮忙解惑,多谢

2012-02-26 
关于二维数组的定义,恳请前辈们帮忙解惑,谢谢inta[1][5]{{0,1,2,0xff,0xff},{1,2,3,4,5},{2,3,4,5,6}}学

关于二维数组的定义,恳请前辈们帮忙解惑,谢谢
int   a[1][5]   =   {   {0,1,2,0xff,   0xff}   ,{   1,2,3,4,5},   {2,3,4,5,6}   }
学长说a{1][5]   为了只能取到第一行的元素,所以a的行坐标写为[1]   ,请问既然数组a   的横坐标为[1],后面的赋初值   允许写后两行数据   {   1,2,3,4,5},   {2,3,4,5,6}   么?

[解决办法]
编译器不检查多维数组的第一个纬度的大小。
以你这段代码为例,编译器会自动根据你给出的初始化元素的个数来在栈中分配空间,以此决定有几 "行 ",也就是说按照那段代码编译器实际是分配3*5个int 型的变量空间来存那些值。比如你测一下a[2][2],你会发现它的值是4。这里的那个 "1 "对编译器来说完全没有任何的作用。
[解决办法]
这个在很多编译器下都会报错,但在有的编译器下就不会报错顺利通过,编译器不同结果就不同。 我刚刚在VC6下试了下是报错的~
[解决办法]
zoco33(ZoCo) ( ) 信誉:101 2007-8-27 9:41:05 得分: 0
编译器不检查多维数组的第一个纬度的大小。

这个说法不对吧?
如果写成 int a[][5] = { {0,1,2,0xff, 0xff} ,{ 1,2,3,4,5}, {2,3,4,5,6} };
那么当然没问题,不会检查第一维度大小,直接分配3*5 int的空间
但如果给定了维度,inta[1][5],应该会按照这个维度值来分配的吧

我用下面的代码测试:
int main()
{
int i, j;
int a[1][5] = { {0,1,2,0xff, 0xff} ,{ 1,2,3,4,5}, {2,3,4,5,6} };
for(j = 0; j < 5; j++){
for(i = 0; i < 3; i++)
printf( "%-10d ", a[i][j]);
printf( "\n ");
}
return 0;
}

结果是这样:

Administrator@winn ~/test
$ gcc main.c
main.c: In function `main ':
main.c:22: warning: excess elements in array initializer
main.c:22: warning: (near initialization for `a ')
main.c:22: warning: excess elements in array initializer
main.c:22: warning: (near initialization for `a ')

Administrator@winn ~/test
$ ./a
0 1892 0
1 2289432 2
2 1627945305 1628796647
255 1892 1628316064
255 -1 2289624

这样看来的话,那个初始化应该是错误的吧
[解决办法]
如果用TC编译的话,会有“Too many initializers in function main”的提示。出现上面的结果的原因自然是因为对没有初始化的数据进行输出,而产生了随机数据输出。

热点排行