第二讲指针习题.docx
- 文档编号:8309178
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:36
- 大小:41.26KB
第二讲指针习题.docx
《第二讲指针习题.docx》由会员分享,可在线阅读,更多相关《第二讲指针习题.docx(36页珍藏版)》请在冰豆网上搜索。
第二讲指针习题
第二讲指针
一、选择题
1.变量的指针,其含义是指该变量的。
A)值B)地址C)名D)一个标志
2.设有说明int(﹡ptr)[M];其中ptr是。
A)M个指向整型变量的指针
B)指向M个整型变量的函数指针
C)一个指向具有M个整型元素的一维数组的指针
D)具有M个指针元素的一维指针数组,每个元素都只能指向整型量
3.选择出i的正确结果。
*
inti;char﹡s=〞a\045+045\ˊb〞;for(i=0;s++;i++);
A)5B)8C)11D)12
4.如下程序的执行结果是。
*
#include
main(){inti;char﹡s=〞a\\\\\n〞;for(i=0;s[i]!
=’\0’;i++)printf(〞%c〞,﹡(s+i));}
A)aB)a\C)a\\D)a\\\\
5.如下程序的执行结果是。
**
#include
main(){staticinta[]={1,2,3,4,5,6};int﹡p;p=a;
﹡(p+3)+=2;printf(〞%d,%d\n〞,﹡p,﹡(p+3));}
A)1,3B)1,6C)3,6D)1,4
6.如下程序的执行结果是。
**
#include
main(){staticinta[][4]={1,3,5,7,9,11,13,15,17,19,21,23};
int(﹡p)[4],i=1,j=2;p=a;
printf(〞%d\n〞,﹡(﹡(p+i)+j));}
A)9B)11C)13D)17
7.若有以下定义,则对a数组元素的正确引用是。
*
inta[5],﹡p=a;
A)﹡&a[5]B)a+2C)﹡(p+5)D)﹡(a+2)
8.若有以下定义,则对a数组元素地址的正确引用是。
*
inta[5],﹡p=a;
A)p+5B)﹡a+1C)&a+1D)&a[0]
9.若有定义:
inta[2][3];则对a数组的第i行第j列(假设i,j已正确说明并赋值)元素值的正确引用为。
*
A)﹡(﹡(a+i)+j)B)(a+i)[j]C)﹡(a+i+j)D)﹡(a+i)+j
10.若有定义:
inta[2][3];则对a数组的第i行第j列(假设i,j已正确说明并赋值)元素地址的正确引用为。
*
A)﹡(a[i]+j)B)(a+i)C)﹡(a+j)D)a[i]+j
11.设有下面的程序段:
chars[]=〞china〞;char﹡p;p=s;
则下列叙述正确的是。
A)s和p完全相同B)数组s中的内容和指针变量p中的内容相等
C)s数组长度和p所指向的字符串长度相等D)﹡p与s[0]相等
12.若有语句:
chars1[]=〞string〞,s2[8],﹡s3,﹡s4=〞string2〞;则对库函数strcpy的错误调用是。
*
A)strcpy(s1,〞string2〞);B)strcpy(s4,〞string1〞);
C)strcpy(s3,〞string1〞);D)strcpy(s1,s2);
13.若有定义:
inta[5];则a数组中首元素的地址可以表示为。
*
A)&aB)a+1C)aD)&a[1]
14.以下与int﹡q[5];等价的定义语句是。
*
A)intq[5]B)int﹡q
C)int﹡(q[5]);D)int(﹡q)[5];
15.若有以下定义,则﹡(p+5)表示。
*
A)元素a[5]的地址B)元素a[5]的值
C)元素a[6]的地址D)元素a[6]的值
16.若有定义:
int﹡p[4];则标识符p。
A)是一个指向整型变量的指针
B)是一个指针数组名
C)是一个指针,它指向一个含有四个整型元素的一维数组
D)说明不合法
17.若有语句int*point,a=4;和point=&a;下面均代表地址的一组选项是。
*
A)a,point,*&aB)&*a,&a,*point
C)*&point,*point,&aD)&a,&*point,point
18.若有说明:
int*p,m=5,n;以下正确的程序段是。
*
A)p=&n;scanf(“%d”,&p);B)p=&n;scanf(“%d”,*p);
C)scanf(“%d”,&n);*p=n;D)p=&n;*p=m;
19.下面程序段的运行结果是。
*
charstr[]=“ABC”,*p=str;
printf(“%s\n”,*(p+1));
A)66B)BCC)字符‘B’的地址D)字符‘B’
20.已有定义intk=2,*ptr1,*ptr2;且ptr1和ptr2均已指向同一个变量k,下面不正确执行的赋值语句是:
。
*
A)k=*ptr1+*ptr2;B)ptr2=k;
C)ptr1=ptr2;D)k=*ptr1*(*ptr2);
21.有以下程序
main()
{chara,b,c,*d;
a='\';b='\xbc';
c='\0xab';d="\0127";
printf("%c%c%c%c\n",a,b,c,*d);
}
编译时出现错误,以下叙述中正确的是。
*
A)程序中只有a='\';语句不正确。
B)b='\xbc';语句不正确。
C)d="\0127";语句不正确。
D)a='\';和c='\0xab';语句都不正确。
22.若有一些定义和语句
#include
inta=4,b=3,*p,*q,*w;
p=&a;q=&b;w=q;q=NULL;
则以下选项中错误的语句是。
*
A)*q=0;B)w=p;C)*p=&a;D)*p=*w;
23.有以下程序
int*f(int*x,int*y)
{if(*x<*y)
returnx;
else
returny;
}
main()
{inta=7,b=8,*p,*q,*r;
p=&a;q=&b;
r=f(p,q);
printf("%d,%d,%d\n",*p,*q,*r);
}
执行后输出结果是。
**
A)7,8,8B)7,8,7C)8,7,7D)8,7,8
24.有以下程序
main()
{char*s[]={"one","two","three"},*p;
p=s[1];
printf("%c,%s\n",*(p+1),s[0]);
}
执行后输出结果是。
*
A)n,twoB)t,oneC)w,oneD)o,two
25.有以下程序
main()
{intx[8]={8,7,6,5,0,0},*s;
s=x+3;
printf("%d\n",s[2]);
}
执行后输出结果是。
*
A)随机值B)0C)5D)6
26.有以下程序
main()
{charstr[]="xyz",*ps=str;
while(*ps)ps++;
for(ps--;ps-str>=0;ps--)puts(ps);}
执行后输出结果是。
*
A)yz<回车>xyzB)z<回车>yz
C)z<回车>yz<回车>xyzD)x<回车>xy<回车>xyz
27.有以下程序
main()
{inta[][3]={{1,2,3},{4,5,0}},(*pa)[3],i;
pa=a;
for(i=0;i<3;i++)
if(i<2)pa[1][i]=pa[1][i]-1;
elsepa[1][i]=1;
printf("%d\n",a[0][1]+a[1][1]+a[1][2]);
}
执行后输出结果是。
**
A)7B)6C)8D)无确定值
28.有以下程序
voidfun(int*a,inti,intj)
{intt;
if(i {t=a[i];a[i]=a[j];a[j]=t; fun(a,++i,--j); } } main() {inta[]={1,2,3,4,5,6},i; fun(a,0,5); for(i=0;i<6;i++) printf("%d",a[i]); } 执行后输出结果是。 ** A)654321B)432156 C)456123D)123456 29.有以下程序 main(intargc,char*argv[]) {intn,i=0; while(argv[1][i]! ='\0') {n=fun();i++;} printf("%d\n",n*argc); } intfun() {staticints=0; s+=1; returns; } 假设程序编译、连接后生成可执行文件exam.exe,若键入以下命令 exam123〈回车〉 则运行结果为。 ** A)6B)8C)3D)4 30.有如下程序段 int*p,a=10,b=1 p=&a;a=*p+b; 执行该程序段后,a的值为。 * A)12B)11C)10D)编译出错 31.对于基类型相同的两个指针变量之间,不能进行的运算是。 A) 32.以下函数返回a所指数组中最小的值所在的下标值。 fun(int*a,intn) {inti,j=0,p; p=j; for(i=j;i return(p);} 在下划线处应填入的是。 A)i=pB)a[p]=a[i]C)p=jD)p=i 33.有如下说明 inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则数值为9的表达式是。 * A)*p+9B)*(p+8)C)*p+=9D)p+8 34.有如下程序 main() {chars[]=”ABCD”,*P; for(p=s+l;p;p++)printf(“%s\n”,*p);} 该程序的输出结果是。 ** A)ABCDB)AC)BD)BCD BCDBCCD CDCDD DD 35.有如下程序 main() {charch[2][5]={“6937”,”8254”},*p[2]; inti,j,s=0; for(i=0;i<2;i++)p[i]=ch[i]; for(i=0;i<2;i++) for(j=0;p[i][j]>’\0’;j+=2) s=10*s+p[i][j]-‘0’; printf(“%d\n”,s); } 该程序的输出结果是。 ** A)69825B)63825C)6385D)693825 36.执行以下程序后,a的值为。 * int*p,a=10,b=1; p=&a;a=*p*b; A)12B)编译出错C)10D)1 37.以下各语句或语句组中,正确的操作是。 * A)chars[5]="abcde"B)char*s;gets(s); C)char*s;s="abcde";D)chars[5];scanf("%s",&s); 38.若已定义: inta[9],*p=a;并在以后的语句中未改变p的值,则不能表示a[1]地址的表达式是。 * A)p+1B)a+1C)a++D)++p 39.下列语句行中,哪些语句能正确进行字符串赋值操作。 * A)charst[4][5] B)chars[5]={‘A’,‘B’,‘C’,‘D’,’E’} C)char*s;s=“ABCDE”; D)char*s;scanf(“%s”,s); 40.以下程序的输出结果是。 * #include voidmain(void) {chara[]={9,8,7,6,5,4,3,2,1,0},*p=a+5; printf(“%d”,*--p); } A)非法B)a[4]的地址C)3D)5 41.以下程序的运行结果是。 ** #include voidmain(void) {inta[4][3]={1,2,3,4,5,6,7,8,9,10,11,12}; int*p[4],j; for(j=0;j<4;j++)p[j]=a[j]; printf("%2d,%2d,%2d,%2d\n",*p[1],(*p)[1],p[3][2],*(p[3]+1)); } A)4,4,9,8B)程序出错 C)4,2,12,11D)1,1,7,5 42.若有下列说明和语句: inta[4][5],(*p)[5];p=a;则对a数组元素的正确引用是。 * A)p+1B)*(p+3)C)*(p+1)+3D)*(*p+2) 43.若有以下定义和语句,则输出结果是。 ** int**pp,*p,a=10,b=20; pp=&p;p=&a;p=&b;printf("%d,%d\n",*p,**pp); A)10,20B)10,10C)20,10D)20,20 44.若有以下定义和语句,则输出结果为。 * char*sp=”\t\b\\\0English\n”; printf(“%d”,strlen(sp)); A)12B)3C)17D)13 45.以下程序输出的结果是。 ** voidmain() {inta=5,*p1,**p2; p1=&a,p2=&p1; (*p1)++; printf(“%d\n”,**p2); } A)5B)4C)6D)不确定 46.设voidf1(int*m,longn);inta;longb;则以下调用合法的是。 ** A)f1(a,b);B)f1(&a,b); C)f1(a,&b);D)f1(&a,&b); 47.设intx;,则经过后,语句*px=0;可将x值置为0。 * A)int*px;B)int*px=&x; C)float*px;D)float*px=&x; 48.若有说明: inti,j=2,*p=&i;,则能完成i=j赋值功能的语句是。 * A)i=*p;B)*p=*&j;C)i=&j;D)i=**p; 49.以下定义语句中,错误的是。 * A)inta[]={1,2};B)char*a[3]; C)chars[10]="test";D)intn=5,a[n]; 50.阅读以下函数 fun(char*sl,char*s2) {inti=0; while(sl[i]==s2[i]&&s2[i]! ='\0')i++; return(sl[i]=='\0'&&s2[i]=='\0'); } 此函数的功能是。 ** A)将s2所指字符串赋给s1 B)比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0 C)比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0 D)比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为0 51.若有以下定义: inta[10],*p=a;则*(p+3)表示的是。 A)元素a[3]的地址B)元素a[3]的值 C)元素a[4]的地址D)元素a[4]的值 52.若有如下语句: int*p1,*p2;则其中int所指的是。 A)p1的类型B)*p1和*p2的类型 C)p2的类型D)p1和p2所能指向变量的类型 53.有如下语句: inta=5,b=8,*p1,*p2; p1=&a;p2=&b; 若有如下表达式: p1=p2;则能正确表示该语句执行后变量在内存中的存储结构的图示为。 A)B) p15ap15a p28bp28b C)D) p15ap15a p28bp28b 54.有如下语句inta=10,b=20,*p1,*p2;p1=&a;p2=&b;如图1所示;若实现如图2所示的存储结构,可选用的赋值语句是: 。 p1p2p1p2 abab 10201020 图1图2 A)*p1=*p2B)p1=p2C)p1=*p2D)*p1=p2 55.若有说明: inti,j,*p=&i;则下面语句中与i=j;等价的语句是: 。 A)*p=*&j;B)i=*pC)i=&j;D)i=**p 56.以下程序的输出结果是。 ** main() {char*s="121"; intk=0,a=0,b=0; do {k++; if(k%2==0){a=a+s[k]-'0';continue;} b=b+s[k]-'0;a=a+s[k]-'0'; }while(s[k+1]); printf("k=%da=%db=%d\n",k,a,b); } A)k=3a=2b=3B)k=3a=3b=2 C)k=2a=3b=2D)k=2a=2b=3 57.设有以下定义: inta[4][3]={1,2,3,4,5,6,7,8,9,10,11,12}; int(*ptr)[3]=a,*p=a[0]; 则下列能正确表示数组元素a[1][2]的表达式是。 * A)*((*ptr+1)[2])B)*(*(p+5)) C)(*ptr+1)+2D)*(*(a+1)+2) 58.执行以下程序后,y的值是。 * main() {inta[]={2,4,6,8,10}; inty=1,x,*p; p=&a[1]; for(x=0;x<3;x++) y+=*(p+x); printf("%d\n",y); } A)17B)18C)19D)20 59.阅读程序 #include main() {inta[10]={1,2,3,4,5,6,7,8,9,0},*p; p=a; printf("%x\n",p); printf("%x\n",p+9); } 该程序有两个printf语句,假设第一个printf语句输出的是194,则第二个printf语句输出结果是。 * A)203B)204C)1a4D)1a6 60.下列程序的输出结果是。 ** main() {staticintnum[5]={2,4,6,8,10}; int*n,**m; n=num; m=&n; printf("%d",*(n++)); printf("%d\n",**m)); } A)44B)22C)24D)46 61.以下程序的输出结果是。 ** #include fut(int**s,intp[2][3]) {**s=p[1][1];} main() {inta[2][3]={1,3,5,7,9,11},*p; p=(int*)malloc(sizeof(int)); fut(&p,a); printf("%d\n",*p); } A)1B)7C)9D)11 62.inta[10],*p;下列表达式正确的是。 * A)p=a;B)p=a[0];C)*p=&a[0];D)p=&a; 63.执行以下程序段后y的值为。 * staticinta[]={1,3,5,7,9}; inty,x,*ptr; y=1; ptr=&a[1]; for(x=0;x<3;x++) y*=*(ptr+x); A)105B)15C)945D)无确定值 64.执行以下程序段后,m的值是。 * staticinta[]={7,4,6,3,10}; intm,k,*ptr; m=10; ptr=&a[0]; for(k=0;k<5;k++) m=(*(ptr+k) *(ptr+k): m; A)10B)7C)4D)3 65.执行以下程序段后,m的值为。 * staticinta[2][3]={1,2,3,4,5,6}; intm,*ptr; ptr=&a[0][0]; m=(*ptr)*(*(ptr+2))*(*(ptr+4)); A)15B)48C)24D)无定值 66.若有以下定义和语句 intw[2][3],(*pw)[3];pw=w; 则对w数组元素的非法引用是。 * A)*(w[0]+2)B)*(pw+1)[2] C)pw[0][0]D)*(pw[1]+2) 67.以下程序的输出结果是。 * Staticinta[2][3]={1,2,3,4,5,6},(*p)[2],I; p=a; for(I=0;I<3;I++) printf("%d",*(*(p+1)+I)); A)输出不确定B)345 C)234D)456 68.若有以下定义 inta[]={1,2,3,4,5,6,7,8,9,10},*p=a; 则值为3的表达式是。 * A)p+=2,*(p++)B)p+=2,*++p C)p+=3,*p++D)p+=2,++*p 69.若有以下定义和语句 inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则不能表示a数组元素的表达式是。 * A)*pB)a[10]C)*aD)a[p-a] 70.设char﹡﹡s;以下正确的表达式是。 ** A)s=〞computer〞;B)﹡s=〞computer〞; C)﹡﹡s=〞computer〞;D)﹡s=’c’; 二、填空题 1.若有定义: inta[2][3]={2,4,6,8,10,12};则﹡(&a[0][0]+2﹡2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第二讲 指针习题 第二 指针 习题