定义数组 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,那么... 前者为什么是错的,后者为什么是对的?
我觉得对于后者 1,2,3,4后面可以跟很多省略掉的0,那么数组的第一维度就无法确定了,而对于前者1,2,3后面也可以省略掉很多0,那么第二维度也无法确定了。
展开
 我来答
fan900207
推荐于2018-04-12 · TA获得超过496个赞
知道小有建树答主
回答量:171
采纳率:0%
帮助的人:42.9万
展开全部
你的理解有一半是对的,有一半是错的。对的就是你明确了两个数组都是不确定的,错的就是你误以为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];
su9_踏雪无痕
2012-09-18 · 超过11用户采纳过TA的回答
知道答主
回答量:24
采纳率:0%
帮助的人:21.9万
展开全部
关于多维数组的定义有一个约定是这样的:
在多维数组中只有第一维才能根据初始化列表缺省地提供,剩余的几个维必须显示的写出,这样编译器才能推断出每个数组维数的长度。
关于你的疑问例如后者:
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}}这样写比较好。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ilikeit2011
2012-09-18
知道答主
回答量:3
采纳率:0%
帮助的人:4671
展开全部
只允许第一维度可以省略,如:
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};

编译器根据实际赋值,确定第一维度
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a525970280
2012-09-18 · TA获得超过1163个赞
知道小有建树答主
回答量:698
采纳率:40%
帮助的人:422万
展开全部
首先,多维数组可以看成是一维数组,其实计算计就是这么做的。
那么
int x[4][];
这个的一行有多少数,你不知道,你叫计算机怎么申请空间。

int x[][3];
它的行是由你赋值来确定的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友f977e36
2012-09-18
知道答主
回答量:8
采纳率:0%
帮助的人:3.8万
展开全部
在谭浩强所编的C程序设计中有关于这方面的介绍
用矩阵形式表示二维数组,是逻辑上的概念,能形象地表示出行列关系。而在内存中,各元素是连续存放的,不是二维的,是线性的。
在C语言中,二维数组中元素的排列顺序是按行存放的,即在内存中先顺序存放第一行的元素,接着再存放第二行的元素。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式