若有下列定义和语句,则对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)
时间: 2023-07-14 18:12:44 浏览: 100
非法引用是 B. *(pt+1)[2],因为 pt 是一个指向 int 数组的指针,而数组 a 是一个二维 int 数组,因此 pt 指向的是 a 的第一行。*(pt+1) 指向 a 的第二行,但是由于优先级关系,*(pt+1)[2] 实际上等价于 *(*(pt+1)+2),也就是访问第二行第三个元素,但是 a 只有 2 行 3 列,因此这是一个非法的访问。
相关问题
若有以下定义和语句: int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a : 则不能表示a数组元素的表达式是 。 A. *p B. a[10] C. *a D. a[p-a]
不能表示 a 数组元素的表达式是 B. a[10]。因为数组下标从 0 开始,所以 a 数组的最后一个元素的下标是 9,而不是 10。因此,a[10] 不是一个合法的数组元素表达式。而其他选项都是合法的表达式。*p 表示 a 数组的第一个元素,即 a[0];*a 也表示 a 数组的第一个元素,即 a[0];a[p-a] 是一个复杂的表达式,但是它是合法的,表示 p 指向的地址距离 a 数组的首地址相差几个 int 类型的单位,即 p 和 a 的地址差除以 sizeof(int)。
2.[单选题] 若有说明语句“int a[2][4];”,则对a数组元素引用正确的是( )。 A a[2][2+1] B a[0][4] C a[0][3] D
C选项正确。在C语言中,数组的索引是从0开始的。对于二维数组`int a`,它实际上是一个包含2行和4列的数组,所以第一行的索引范围是0到1(包括0但不包括2),第二行的索引范围也是0到3(同样包括0但不包括4)。因此,`a`是合法的,它引用的是第一行的第四个元素。选项A中的`2+1`超出了数组的列边界,选项B中的`a`超出了数组的行边界,所以它们都是错误的引用。