C语言程序设计

单选题设有以下说明和语句:int x[3][4],(* p)[4];p=a;则与表达式*(*p+2)等价的选项是(  )。A a[0][2]B *(a+2)[0]C (*a+2)[0]D a[2][0]

题目
单选题
设有以下说明和语句:int x[3][4],(* p)[4];p=a;则与表达式*(*p+2)等价的选项是(  )。
A

a[0][2]

B

*(a+2)[0]

C

(*a+2)[0]

D

a[2][0]

参考答案和解析
正确答案: D
解析:
(*p)[4]是指向有4个元素的数组指针,a为二位数组首地址,赋值给数组指针p。题目中表达式*(*p+2)是对数组a第1行第3列元素a[0][2]的引用。a[0][2]是数组第1行第3列元素,与题目中等价,A项正确。*(a+2)[0]是对数组第3行第1列元素的引用,B项错误。(*a+2)[0]是对数组第1行第3列元素的引用,C项错误。a[2][0]是数组第3行第1列元素,D项错误。答案选择A选项。
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

若有下面的程序片段:

int[12]={0},*p[3],**pp,i;

for(i=0;i<3;i)

p[i]=&a[i*4];

pp=p;

则对数组元素的错误引用是

A.pp[0][1]

B.a[10]

C.p[3][1]

D.*(*(p+2)+2)


正确答案:C
解析:考查指向数组的指针。本题综合考查一维数组和多维数组指针变量的表示方法。在C语言中,引用数组元素的方法有两种,即下标法和指针法。下标法如a[i]形式;指针法如*(a+i)或*(p+1)。其中,a是数组名,p是指向数组的指针变量,其初值p=a。再如*(*(p+2)+2)是a[2][2]的值,注意语句中指针型数组的书写格式,不能写成"(*数组名)[长度]",因为这是定义指向含有"长度"个元素的一维数组的指针变量。例如有定义语句"int a,b,c,c,*p[3]={&a,&b,&c};",它定义了一个名为p的指针型数组,其3个元素p[0],p[1],p[2]分别指向f3个整型变量a,b,c。

第2题:

有如下程序段: int a[10],*p[3],**pp,i; for(i=0;i<3:i++) p[i]=&a[i*4); pp=p; 则正确表示数组a元素的表达式是 ______。

A.pp

B.a[10]

C.p[3]

D.*(*(p+2))


正确答案:D

第3题:

若有定义语句: int a[2][3],*p[3]; ,则以下语句中正确的是A ) p=a;B)p[0]=a; C) p[0]=&am

若有定义语句: int a[2][3],*p[3]; ,则以下语句中正确的是

A ) p=a;

B)p[0]=a;

C) p[0]=&a[1][2];

D)p[1]=&a;


正确答案:C

                                           

第4题:

执行下面的语句后,表达式*(p[0]+1)+**(q+2)的值为______。 int a[]={5,4,3,2,1},*p[]={a+3,a+2,a+1,a},**q=p;

A.8

B.7

C.6

D.5


正确答案:D
解析:p为指针数组,其元素分别为指向数组a的4个元素的指针。q为指向指针的指针变量,其初值为指针数组p的首地址。所以:表达式*(p[0]+1)+**(q+2)=*(a+3+1)+**(p+2)即是*(a+4)+*(a+1)=a[5]+a[2]=1+4=5。

第5题:

以下程序的输出结果是( )。 {int x;int*y;}*p; int dt[4]={1,2,3,4}; struct st aa[4]={2,&dt[0],3,&dt[0],4,&dt[0],5,&dt[0],}; {p=aa; pfintf("%d\n",++(p->x)); }

A.1

B.2

C.3

D.4


正确答案:C
解析:程序首先将指针p指向结构体数组aa的首地址,通过p->x引用了结构体数组aa[0]的第一个成员2;++(p->x)是将p->x的值加1,所以输出结果为3。

第6题:

若有程序片段: int a[12]={0},* p[3],* *pp,i for (i=0;i<3;i++) p[i]=&a[i*4]; pp=p; 则对数组元素的错误引用是 ( )

A.pp[0][1]

B.a[10]

C.p[3][1]

D.*(*(p+2)+2)


正确答案:C

第7题:

设有C语言变量说明“static int a[][2]={{1,2),(3,4}};int *pa,(*pb)[2];”,则执行语句“pa=pb=&

设有C语言变量说明“static int a[][2]={{1,2),(3,4}};int *pa,(*pb)[2];”,则执行语句“pa=pb=&a[0][0];”后,(*(pa+1))的值为(31)。

A.2

B.3

C.&a[0][1]

D.&a[1][0]


正确答案:A
解析:对于语句“pa=pb=&a[0][0];”赋值后pb已经变为列指针,则pa也是列指针。在进行TC编译时,会出现“Warning:Suspiciouspointerconversioninfunctionmain”的提示信息,表明pb由行指针变为列指针。

第8题:

设有以下定义和语句 int a[3][2]={1,2,3,4,5,6},*p[3]; p[0]=a[1]; 则*(p[0]+1)所代表的数组元素是

A.a[0][1]

B.a[1][0]

C.a[1][1]

D.a[1][2]


正确答案:C
解析:本题中首先定义了一个3行2列的数组a,一个长度为3的指针数组 p,接着把地址a[1]赋给p[0]此时p[0]为a[1][0]的地址,p[0]+1为a[1][1]的地址,故*(P[0]+1)代表的元素为a[1][1]。

第9题:

有以下定义和语句

int a[3][2]={1,2,3,4,5,6,},*p[3];

p[0]=a[1];

则*p[0]+1)所代表的数组元素是

A.a[0][1]

B.a[1][0]

C.a[1][1]

D.a[1][2]


正确答案:C
解析:本题中a为三维数组,其中a[0],a[1],a[2]分别代表它的三维(的首指针),p为一个一维指针数组,含有3个元素,每两行代码把数组的第二维的首指针赋值给指针数组的第一个值,所 以,*  (p[0]  +1)即取p[0]所指数组的第二个值,即为数组a的第二维的第二个值,即为a[1] [1]。

第10题:

执行以下程序段后,m的值为______。 int a[2][3]={ {1,2,3},{4,5,6} }; int m,*p; p=&a[0][0]; m=(*p)*(*(p+2))*(*(p+4));

A.15

B.14

C.13

D.12


正确答案:A

更多相关问题