3.若有定义int a[2][3],则对数组元素的非法引用是()。 A.a[0][1/2];B.a[1][1];C.a[4−4][0];D.a[0][3];
时间: 2024-06-24 10:00:28 浏览: 78
在C语言中,数组的索引是从0开始的,并且索引的范围是基于数组的大小。对于二维数组`int a[2]`,第一维有2个元素(索引为0到1),第二维有3个元素(索引为0到2)。因此,合法的索引组合包括`a[0]`到`a`。
A选项`a[1/2]`尝试使用分数索引,这是不允许的。
B选项`a`是在合法的范围内。
C选项`a[4-4]`会计算为`a`,因为4减去4等于0,这是合法的。
D选项`a`超出了第二维的索引范围,因为第二维最大索引是2。
所以,非法的引用是选项D `a`。
相关问题
3.若有定义int a[2][3],则对数组元素的非法引用是()。 A.a[0][1/2];B.a[1][1];C.a[4−4][0];D. a[0][3];
在C语言中,数组的索引是从0开始的,所以对数组元素的引用必须是有效的。根据数组`a`的定义,它是一个2行3列的二维数组,所以其索引范围如下:
- 行索引:0到1(因为是两行)
- 列索引:0到2(因为是三列)
让我们检查每个选项:
A. `a[1/2]`:行索引`0`是合法的,但列索引`1/2`不是一个整数,表示不明确,通常不允许除法操作作为索引,所以这是非法的。
B. `a`:行索引`1`是合法的,列索引`1`也是合法的,因为它在有效的列范围内。
C. `a[4−4]`:`4−4`等于0,所以行索引是合法的,列索引也是0,因此这个引用是合法的。
D. `a`:行索引`0`是合法的,但是列索引`3`超出了数组的列范围(应该是0到2),所以这是非法的。
因此,非法的引用是`A`和`D`。正确答案是:
A. `a[1/2]`
D. `a`
若有下列定义和语句,则对a数组元素的非法引用是. int a[2][3], (*pt)[3]; pt=a; A. pt[0][0] B. *(pt+1)[2] C. *(pt[1]+2) D. *(a[0]+2)
非法引用是 B. *(pt+1)[2],因为 pt 是一个指向 int 数组的指针,而数组 a 是一个二维 int 数组,因此 pt 指向的是 a 的第一行。*(pt+1) 指向 a 的第二行,但是由于优先级关系,*(pt+1)[2] 实际上等价于 *(*(pt+1)+2),也就是访问第二行第三个元素,但是 a 只有 2 行 3 列,因此这是一个非法的访问。