定义数组 int x[4][]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}} int x[][3]={1,2,3,4}

前者为什么是错的,后者为什么是对的?
我觉得对于后者 1,2,3,4后面可以跟很多省略掉的0,那么数组的第一维度就无法确定了,而对于前者1,2,3后面也可以省略掉很多0,那么第二维度也无法确定了。

你的理解有一半是对的,有一半是错的。对的就是你明确了两个数组都是不确定的,错的就是你误以为0可以有无限个。
你要知道第一维度和第二维度都代表什么。前面代表数组有几行,后面代表每行有几个元素。
如果int [][3] = {1,2,3}那么系统知道了每行有几个,就可以确定数组为a[1][3];
如果int [][3] = {1,2,3,4};那么系统就确定数组为a[2][3]= {1,2,3,4,0,0};0的个数就可以被确定了。
但是如果是int [4][]={1,2,3}那么系统就不知道每行有几个,就没法确定有几个0了。
你可以试试直接定义a[]={1,2,3};是可以的。相当于a[3];
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-09-18
关于多维数组的定义有一个约定是这样的:
在多维数组中只有第一维才能根据初始化列表缺省地提供,剩余的几个维必须显示的写出,这样编译器才能推断出每个数组维数的长度。
关于你的疑问例如后者:
int x [][3] = {{1,2,3}}; 第一维是1
int x [][3] = {{1,2,3},{1,2,3}}; 第一维是2

关于后者你的理解是错误的,3代表每一维有三个元素,而你写了四个。追问

int x[][3]={1,2,3,4}等价于int x[][3]={1,2,3,4,0,0}吗?

追答

是等价的,但是这样写结构不清晰,可读性比较差。
{{1,2,3},{1,2,3},{1,2,3},{1,2,3}}这样写比较好。

第2个回答  2012-09-18
只允许第一维度可以省略,如:
x[]={1,2,3};
x[][5]={1,2,3};
x[][5][6]={1,2,3};

不允许如下定义:
x[4][]={1,2,3};
x[4][][3]={1,2,3};

编译器根据实际赋值,确定第一维度
第3个回答  2012-09-18
首先,多维数组可以看成是一维数组,其实计算计就是这么做的。
那么
int x[4][];
这个的一行有多少数,你不知道,你叫计算机怎么申请空间。

int x[][3];
它的行是由你赋值来确定的
第4个回答  2012-09-18
在谭浩强所编的C程序设计中有关于这方面的介绍
用矩阵形式表示二维数组,是逻辑上的概念,能形象地表示出行列关系。而在内存中,各元素是连续存放的,不是二维的,是线性的。
在C语言中,二维数组中元素的排列顺序是按行存放的,即在内存中先顺序存放第一行的元素,接着再存放第二行的元素。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网