单选题
1、第6题 (1.0分) 题号:654 以下不能正确定义二维数组的选项是()。
A
int a[2][2]={{1},{2}};
B
int a[][2]={1,2,3,4};
C
int a[2][2]={{1},2,3};
D
int a[2][]={{1,2},{3,4}};
答案解析
正确答案:D
解析:
在 C 语言中,定义二维数组时需要遵循特定的语法规则,特别是关于数组维度省略的限制。
**核心规则:**
在定义二维数组时,**可以省略第一维(行)的大小**,编译器会根据初始化列表中的元素个数自动计算行数;但是,**第二维(列)的大小绝对不能省略**。这是因为编译器需要知道每一行有多少个元素,才能正确地将线性排列的初始化数据映射到二维结构中,并计算内存偏移量。
**选项分析:**
* **A. `int a[2][2]={{1},{2}};`**
* **正确**。定义了 2 行 2 列的数组。初始化时,`{1}` 表示第一行第一个元素为 1,其余补 0;`{2}` 表示第二行第一个元素为 2,其余补 0。这是合法的初始化方式。
* **B. `int a[][2]={1,2,3,4};`**
* **正确**。省略了第一维,指定了第二维为 2。编译器根据初始化列表 `{1,2,3,4}` 共有 4 个元素,每行 2 个,自动推断出第一维为 $4/2=2$。即等价于 `int a[2][2]`。
* **C. `int a[2][2]={{1},2,3};`**
* **正确**。这是一种混合初始化方式。`{1}` 初始化第一行(`a[0][0]=1`, `a[0][1]=0`)。随后的 `2` 和 `3` 继续按顺序初始化剩余的元素,即 `a[1][0]=2`, `a[1][1]=3`。虽然写法不如全括号清晰,但在 C 语言标准中是合法的。
* **D. `int a[2][]={{1,2},{3,4}};`**
* **错误**。这里**省略了第二维(列)的大小**。如前所述,C 语言规定二维数组定义时不能省略列宽。编译器无法确定每行应该存放多少个元素,因此会报错。
**结论:**
选项 D 违反了“二维数组定义时不可省略第二维大小”的规则,因此是不能正确定义二维数组的选项。
故正确答案为 **D**。
题目纠错
c语言选择判断题库
相关题目
单选题
1、第253题 (1.0分) 题号:208 下列各m的值中,能使m%3==2&&m%5==3&&m%7==2为真的是()。
单选题
1、第252题 (1.0分) 题号:557 打开文件时,方式”w”决定了对文件进行的操作是()。
单选题
1、第251题 (1.0分) 题号:87 C语言源程序的基本单位是()。
单选题
1、第250题 (1.0分) 题号:709若定义:int a=511,*b=&a;, 则printf(”%d\n”,*b);的输出结果为()。
单选题
1、第249题 (1.0分) 题号:172 在C语言程序中()。
单选题
1、第248题 (1.0分) 题号:682 sizeof( )是()。
单选题
1、第247题 (1.0分) 题号:182 执行下面程序后,输出结果是()。
单选题
1、第246题 (1.0分) 题号:718 系统的标准输入文件是指()。
单选题
1、第245题 (1.0分) 题号:621 printf函数中用到格式符%5s,其中数字5表示输出的字符串占用5列,如果字符串长度大于5,则输出按方式()。
单选题
1、第244题 (1.0分) 题号:205 变量p为指针变量,若p=&a,下列说法不正确的是()。
