第二讲指针习题.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;ireturn(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