若有下面的程序片段:int[12]={0},*p[3],**pp,i;for(i=0;i<3;i)p[i]=&amp;a[i*4];pp=p;则对数组元

题目

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

如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

若有程序片段: 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

第2题:

以下程序 int aa[3][3]={{2},{4},{6}}; main() { int i,*p=&aa[0][0]; for(i=0;i<2;i++){ if(i==0)aa[i][i+1]=*p+1; else ++p; printf("%d",*p); } } 的输出是________。

A.23

B.26

C.33

D.36


正确答案:A
解析:观察题目,可以发现,*p=&aa[0][0]语句实际是将数组aa的首地址赋给了指针变量p,将i的值带入for循环中,i=0时,aa[0][1]=3;*p=2;*p输出的是指针所指向数组值,此时p所指向的是aa[0][0],输出2,而i=1时执行了++p操作使指针向后移动指向了aa[0][1],所以在输出*p时应为3。

第3题:

有以下程序main(){ int a[3][3],*p,i; p=&a[0][0]; for(i=0;i<9;i++)p[i]=i; for(i=0;i<3;i++)printf("%d",(++p)[i]);}程序运行后的输出结果是( )。A.012 B.135 C.234 D.345


正确答案:B
第一个for循环的结果是p[9]={0,1,2,3,4,,5,6,7,8},第二个for循环:i=0,++p,使得p指向了1,所以输出的结果是1,然后i++,i=1,++p,p指向了3……

第4题:

下列程序的输出结果是()。includemain(){ int a[2][3]={{1,2,3},{4,5,6}),(*p)[3],i;p=

下列程序的输出结果是( )。 #include<stdio.h> main() { int a[2][3]={{1,2,3},{4,5,6}),(*p)[3],i; p=a; for(i=0;i<3;i++) { if(i<2) p[1][i]=p[1][i]-1; else p[1][i]=1; } printf("%d\n",a[0][1]+a[1][1]+a[1][2]); }

A.8

B.7

C.12

D.9


正确答案:B
解析:第1次执行for循环,p[1][0]=p[1][0]-1=3:第2次执行for循环,p[1][1]=p[1][1]-1=4;第3次执行for循环,p[1][2]=1,最后输出的是a[0][1]+a[1][1]+a[1][2]=2+4+1=7。

第5题:

有如下程序段: 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

第6题:

已知程序段inta[3][4],*p[3]={a[0],a[1],a[2]},**pp=p,i;for(i=0;i12;i++)a[i/4][i%4]i;则pp[1][2]的值是()。

A.6

B.5

C.4

D.3


正确答案A

第7题:

有以下程序: main() { int a[3][3], *p, i; p=&a[0][0]; for(i=0; i<9; 1++)p[i]=i; for (i=0; i<3; i++)printf("% d", a[1][i]); 程序运行后的输出结果是______。

A.0 1 2

B.1 2 3

C.2 3 4

D.3 4 5


正确答案:D
解析:p指向的a的首地址,由于C语言是行优先存储的,一维数组p就依次存放了a中从第0行到第2行的所有元素,因此a[1][i]就对应了p[3]~p[5]。

第8题:

若有下面的程序片段:

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。

第9题:

有以下程序: main() { int a[3][3],*p,i; p=&a[0][0]; for(i=0;i<9;i++)p[i]=i; for(i=0;i<3;i++)printf("%d",a[1][i]); } 程序运行后的输出结果是 ______。

A.0 1 2

B.1 2 3

C.2 3 4

D.3 4 5


正确答案:D
解析:p指向的a的首地址,由于C语言是行优先存储的,一维数组p就依次存放了a中从第0行到第2行的所有元素,因此a[1][i]就对应了p[3]~p[5]。

第10题:

有以下程序main ( ) { int a[3] [3],*p, i; p=&a[0] [0]; for (i=0;i<9; i++) p[i] =i; for(i=0;i<3;i++) printf ("%d" ,a[1] [i] );} 程序运行后的输出结果是

A.12

B.123

C.234

D.345


正确答案:D
解析:本题考查的是二维数组元素在内存中的排列形式。虽然二维数组成多维数组从结构上来看不是线性的,但是在C语言中,这些数组元素在内存中的排列是连续线性存放的。它们的排列规则是:第一维下标变化最慢,最右边的下标变化最快.例如本题中定义的二维数组a[3][3]中9个元素在内存中的排列顺序是:a[0][0],a[0][1],a[0][2],a[1][0],a[1][1],a[1][2],a[2][0],a[2][1],a[2][2]。在主函数中,首先定义了二维数组a[3][3],然后定义了一个指针p指向数组a的第1个元素a[0][0]。在第一个for循环中,依数组a在内存中的排列顺序为其元素赋从0~8九个值,然后用第二个for循环依次输出a[1][0],a[1][1],a[1][2]三个元素的值。所以,4个选项中选项D符合题意。

更多相关问题