单选题
9.以下数组定义中不正确的是()。
A
int a[2][3];
B
int b[][3]={0,1,2,3};
C
int c[100][100]={0};
D
int d[3][]={{1,2},{1,2,3},{1,2,3,4}};
答案解析
正确答案:D
解析:
在 C 语言中,二维数组的定义和初始化需要遵循特定的语法规则,主要涉及内存分配和维度确定的逻辑。
对于选项 A `int a[2][3];`,这是最标准的二维数组定义方式,明确指定了行数为 2,列数为 3,编译器可以据此分配固定的内存空间,因此该定义是正确的。
对于选项 B `int b[][3]={0,1,2,3};`,在初始化二维数组时,如果提供了初始值列表,第一维(行数)可以省略,编译器会根据初始值的个数和第二维(列数)的大小自动计算行数。这里列数为 3,初始值有 4 个,编译器会将其处理为 2 行(第一行 `{0,1,2}`,第二行 `{3,0,0}` 补零),因此该定义也是正确的。
对于选项 C `int c[100][100]={0};`,这是一个合法的静态初始化。它定义了一个 100x100 的数组,并将第一个元素初始化为 0,其余元素默认也会初始化为 0。虽然数组较大,但在语法上完全正确。
对于选项 D `int d[3][]={{1,2},{1,2,3},{1,2,3,4}};`,这里省略了第二维(列数)。在 C 语言中,**二维数组的第二维(列宽)是必须指定的**,不能省略。这是因为编译器需要知道每一行有多少个元素,才能正确计算内存地址偏移量(即确定下一行从哪里开始)。如果省略列数,编译器无法确定每行的边界,也就无法为数组分配连续的内存空间。即使给出了初始值,C 语言标准也不允许通过这种方式推导列数(这与省略行数不同,因为行是可以动态增加的,但列宽必须固定以维持数组结构的规整性)。因此,该定义是错误的。
综上所述,不正确的数组定义是 D。
答案:D
题目纠错
c语言选择判断题库
相关题目
单选题
1、〖第16题〗202) 设有如下定义: struct sk {int a; float b;} data,*p;
单选题
1、〖第15题〗33) 若有以下定义:char s='\092'; 则该语句()。
单选题
1、〖第14题〗211)fgets(str,n,fp)函数从文件中读入一个字符串,以下正确的叙述是()。
单选题
1、〖第13题〗205) 变量p为指针变量,若p=&a,下列说法不正确的是()。
单选题
1、〖第12题〗22) 以下不符合C语言语法的赋值语句是()。
单选题
1、〖第11题〗61)设j和k都是int类型,则for循环语句 for(j=0,k=-1;k=1;j++,k++) printf(”****\n”);()。
单选题
10.以下函数调用语句中实参的个数是()。 func((e1,e2),(e3,e4,e5));
单选题
9.以下程序的输出结果为()。 main() {int i=010,j=10; printf(”%d,%d\n”,++i,j--); }
单选题
8.若有以下程序段:int a=3,b=4; a=a^b;b=b^a;a=a^b;则执行以上 语句后,a和b的值分别是()。
单选题
7.以下运算符中,优先级最高的运算符是()。
