关于C语言定义二维数组的问题

以下能正确定义二维数组的是()(正确答案:B)
A) int a[ ][3];
B) int a[ ]={2*3}
C) int a[ ][3]={ };
D) int a[2][3]={{1},{2},{3,4}};
为什么上边这道题的答案是B,不是C?还有,“int a[ ][3]={2*3};”和“int a[ ][3]={6}"等价吗?
不好意思啊!我是在自学C语言,还没学到指针那块,麻烦大家尽量解释得浅显些,谢谢大家! 另外,刚才打错了,B选项应该是“int a[ ][3]={2*3};”

以下能正确定义二维数组的是 -- 以下能正确定义 数组的是 (去掉二维两字)。

A) int a[ ][3]; -- 语法错,没带初始化,不允许用 [空白],不允许 数组大小不定。

B) int a[ ]={2*3} -- 正确定义了数组,是一维数组,数组元素只有1 个,初始化数值为 2*3 ,就是 6。

C) int a[ ][3]={ }; -- 语法错,花括号里没填初始化数值。

D) int a[2][3]={{1},{2},{3,4}}; -- 语法错,数组声明为2行3列,却初始化为3行2列。 如果是 int a[3][2]={{1},{2},{3,4}}; 语法就正确了。

所以答案是 B
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-08-22
首先你要理解二维数组的真正含义,它的第一维就是一组数据的起始地址,第二维就是某组数据中的某个值.其次,你要知道a[][4]所表达的意思,是指二维数组a的每一维都是由4个元素组成的一维数组.而编译器可以根据你赋给a的初值个数计算它的第一维长度(元素总个数/4,如果不能整除,则长度加1,此时还应该有几个没有赋初值的数组元素).而a[3][]的意思从表面上看可以成立,但问题是编译器不能直接识别其第二维的确切长度(你可以考虑,如果总的初值个数为2时,可以认为a的第二维长度为1,也可以是2,.......),这样就会产生错误.所以,可以a[][4]={*,*,*……}这样定义,而不能定义a[3][]={*,*,*……}。
对于你补充的问题,其实我已经讲了.因为赋初值是5个元素,所以5/4=1,但除不尽,所以要加1,即实际数组a实质上定义为a[2][4],其内元素为:
1234
5000(后面的三个0是系统默认值)
希望对你有所帮助.^-^
第2个回答  2010-08-13
首先明确个概念 二维数组应该是个指针
a是因为不知道确切的大小 所以编译报错 c和a一样
d是因为对二维数组赋值存在问题
b就是个指针
不管是什么数组都是一片连续的内存空间 那么就有个对应的入口地址这个明白 不管是什么数组都是这样的 二维其实是个一维的只是认为规定了下 方便吧
第3个回答  2010-08-13
你确定你没搞错?int a[]={2*3}是一维数组啊!
二维数组都不是。
A的话给出初始值就是了。
C的话没这样的写法,编译出错。
D的话编译出错。

相关了解……

你可能感兴趣的内容

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