题目
以下能正确定义数组并正确赋初值的语句是( )。A. int N=5,b[N][N];B. int a[1][2]=({1),(3)};C. intc[2][]=({1,2),(3,4)};D. int d[3][2]=({1,2),(34)};
以下能正确定义数组并正确赋初值的语句是( )。
A. int N=5,b[N][N];
B. int a[1][2]={{1},{3}};
C. intc[2][]={{1,2},{3,4}};
D. int d[3][2]={{1,2},{34}};
题目解答
答案
D. int d[3][2]={{1,2},{34}};
解析
本题考查二维数组的定义与初始化,需掌握以下关键点:
- 数组大小的确定:数组的行、列大小必须是编译时常量,不能是变量(除非使用C99的VLA特性,但考试中通常不考虑)。
- 初始化规则:
- 行数必须匹配:初始化的行数不能超过数组声明的行数。
- 列数自动推断:若某行的列数未显式声明,可通过初始化数据推断,但需保证所有行的列数一致。
- 缺省值补零:若某行的初始化元素不足,剩余元素自动补零。
选项A:int N=5,b[N][N];
- 错误原因:
N是变量,而数组大小必须是编译时常量。若题目未明确支持C99的VLA特性,则此写法不合法。
选项B:int a[1][2]={{1},{3}};
- 错误原因:
a声明为1行2列,但初始化时提供了2行数据,导致行数不匹配。
选项C:intc[2][]={{1,2},{3,4}};
- 错误原因:
intc写法错误(int与变量名c之间缺少空格),导致语法错误。若修正为int c[2][],则合法,但题目未修正,故仍错误。
选项D:int d[3][2]={{1,2},{34}};
- 正确性分析:
d声明为3行2列。- 第一行
{1,2}完整赋值,第二行{34}仅赋第一个元素,第二个元素自动补零(等价于{34, 0})。 - 第三行未显式赋值,所有元素自动补零。
- 符合C语言初始化规则。