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

2024-11-29 17:06:52
推荐回答(4个)
回答1:

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

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

回答2:

首先你要理解二维数组的真正含义,它的第一维就是一组数据的起始地址,第二维就是某组数据中的某个值.其次,你要知道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是系统默认值)
希望对你有所帮助.^-^

回答3:

首先明确个概念 二维数组应该是个指针
a是因为不知道确切的大小 所以编译报错 c和a一样
d是因为对二维数组赋值存在问题
b就是个指针
不管是什么数组都是一片连续的内存空间 那么就有个对应的入口地址这个明白 不管是什么数组都是这样的 二维其实是个一维的只是认为规定了下 方便吧

回答4:

你确定你没搞错?int a[]={2*3}是一维数组啊!
二维数组都不是。
A的话给出初始值就是了。
C的话没这样的写法,编译出错。
D的话编译出错。