首页 > 试题广场 >

有以下语句定义 int a[2][3]; int (*p)[

[不定项选择题]
有以下语句定义
int a[2][3];
int (*p)[3]=a; 
int *q=*a;
则能输出a[1][2]的值的语句是()
  • cout<<*(*(a+1)+2)
  • cout<<p[1][2];
  • cout<<*(q+5);
  • cout<<q[1][2];
发表于 2019-09-22 19:13:55 回复(8)
这道题有问题,a数组为一个二维数组,可以看成一个含有两个元素,每个元素里含有一个三个元素的一维数组,则p指针应该定义为一个二维指针,*p[2],这样将a赋值才是对的,题目中的(*p)[3]表示的是p指向一个含有三个元素的数组。
发表于 2019-09-22 11:21:15 回复(3)
数组指针又称为行指针,所以p指向索性为0的那一行
发表于 2021-05-05 09:34:57 回复(1)
(int (*)[n])q,可以将q转换,就是使用q[1][2]了
发表于 2019-09-15 21:09:26 回复(0)
D将指针q当数组来用
发表于 2021-08-04 11:17:19 回复(0)
首先要明确好一个变量它的类型是啥?如 int a[2][3], a 的类型是:元素类型为 int[3] 的数组
发表于 2020-02-29 11:23:46 回复(0)
二维数组名相当于一个二维指针
发表于 2022-10-10 19:05:23 回复(1)
这里我认为应该是int *p =a;
发表于 2019-09-14 12:20:50 回复(1)
D选项,个人理解是,a退化为指向a[0]的指针,解引用得到a[0](这是一个数组),然后接着退化为指向a[0]第一个元素a[0][0]的指针,再把这个指针赋给q
发表于 2023-04-14 10:38:40 回复(0)
q不是二维数组,所以D错
发表于 2021-09-03 19:08:17 回复(2)
这题B选项考的是指针数组和数组指针的区别 数组指针: int (*p)[3] 指针数组:int * p[3]
发表于 2020-11-18 00:39:13 回复(1)
做了几次这个题,每次都在不同的地方踩坑
发表于 2024-11-22 02:00:23 回复(0)
A选项没有悬念 B数组指针的本质就是二维数组 C这里int*q=*a,其实指针q指向的地址还是a的首地址(因为对于二维数组a,&a[0],&a [0][0]地址都是一样的,只不过他们偏移的步长不一样),只不过它的类型是int而不是int[3],也就是说指针偏移+1,实际上地址加了4而不是加12,这里p+5指向的地址就是a[1][2]的地址也就是说p+5等价于&a[1][2],再解引用就可以拿到其内容。 本质上是一级指针访问二维数组
发表于 2024-07-10 18:31:13 回复(1)
发表于 2023-12-26 18:02:04 回复(0)
这个题我还有个想法,不知道为什么错,int (*q)[3] = *a;左边声明一个指向3个元素的一维数组的指针,右边是二维数组取一次引用后退化的一维数组名。左边是指针,右边是数组名,这个赋值感觉合情合理为啥错了捏,请大神指点一二。
发表于 2023-08-28 19:54:21 回复(1)
q不应该是指向第一行的么,代表的不应该是第一行的地址么,那这么说a[5]也是a[1][2]
发表于 2021-10-23 17:42:08 回复(0)
可以这样理解数组指针吗,比如int (*p)[3],可以理解为p里面放有三个地址,然后*p就是访问第一个地址值,*p+1就是第二个,*p+2就是第三个地址,*(*p)就是第一个地址中存的变量值,*(*p+2)就是第二个值.....
发表于 2020-10-08 20:31:30 回复(0)