首页 > 试题广场 >

若已定义:int a[4][3]={1,2,3,4,5,6,

[单选题]
若已定义:int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12},(*prt)[3]=a,*p=a[0];则能够正确表示数组元素a[1][2]的表达式是(        )
  • *((*prt+1)[2])
  • *(*p+5))
  • (*prt+1)+2
  • *(*(a+1)+2)
B选项多了一个括号
编辑于 2017-08-18 14:55:34 回复(1)
A:(*prt)[3]是一个数组指针,所以是(*(ptr+1))[2]
B:*p是一个指针,则是 *(p+5)
C:应该为:*(*(prt+1)+2)
D:*(*(a+1)+2)正确
编辑于 2018-10-11 10:12:48 回复(1)
简单说就是,通过数组指针(prt)或者二维数组本身名字(a)访问二维数组的值,*和[]这两个东西的总数得是2。用这两个名字来访问基本是等同的。 所以a.c.d三个选项中,都是通过prt和a来访问的,a多了一层,c少了一层,都不行,d可以。 有效的方式如下(a可以由prt代替)—————— a[1][2];—— *(a[1]+2);—— *(*(a+1)+2);—— *(*a+5);—— (*a+1)[4];—— b的话,是通过一级指针访问的,可以有两种:—— *(p+5);—— p[5];—— 但是b多了半个括号,就不行了。还有就是,注意—— *p+5;—— 是错的,因为,这个是1+5的结果,可以把后面的6改成99能试出来。
发表于 2018-01-20 15:08:39 回复(0)
Prt是二维数组,有行和列两层
*prt表示第一行的首地址
*(prt+1)表示第二行的首地址
*prt+1表示第一行的第二列
(*prt)[3]表示第一行的第三列
发表于 2023-04-28 11:11:35 回复(2)
d 选项  二维数组名  a 指向的是第一行(1,2,3)这个小数组,a+1,编译一个整数组的,变为指向第二行4,5,6。 *(a+1) 指向的是第二行数组里的首个元素的地址也就是4,此时再偏移两个单位,指向了6,最外层再解引用,得到6.
发表于 2019-07-30 12:00:16 回复(0)
int * p=a[0],那么P指向a[0][0],*p=a[0][0],所以b显然不对
发表于 2017-06-01 19:54:58 回复(2)
指向二维数组的指针的写法是int (*p)[3] = a;
发表于 2019-07-29 09:42:55 回复(0)
BD都对,VS2015上可以的,都是输出6.
	int a[4][3] = { 1,2,3,4,5,6,7,8,9,10,11,12 }, (*prt)[3] = a, *p = a[0];
	cout << a[1][2] << endl;
	cout << *(*a + 5) << endl;
	cout << *(*(a + 1) + 2) << endl;

发表于 2017-06-26 22:48:03 回复(4)
a是二维数组的地址,*a是第一行一维数组的地址,*(*a)是该一维数组第一个元素的值
发表于 2022-03-21 00:56:30 回复(1)
a应该是*((*prt+1))【2】
发表于 2022-03-02 11:35:10 回复(0)
a是一个二维数组,ptr是一个数组指针与a数组可以看做是同类型,p是一个指针指向a的首地址
编辑于 2019-07-02 23:38:55 回复(0)
答案应该是D,B选项中的p本身是一个int大小对象的地址,其取值已是一个int类型数据,不能再次进行取值。
发表于 2017-05-17 21:10:20 回复(0)
只有D是对的?
发表于 2017-05-16 13:50:12 回复(1)
b d 俩个答案都是对的 好吗
发表于 2017-05-14 21:34:31 回复(5)