第10章 指针.docx
《第10章 指针.docx》由会员分享,可在线阅读,更多相关《第10章 指针.docx(34页珍藏版)》请在冰豆网上搜索。
第10章指针
第十章 指针
一、单项选择题
1.下列选项中正确的语句组是()
A.chars[8];s={"Beijing"};B.char*s;s={"Beijing"};
C.chars[8];s="Beijing";D.char*s;s="Beijing";
(知识点:
指针与数组;难度系数:
1;答案:
D)
2.已定义以下函数
intfun(int*p)
{
return*p;
}
该函数的返回值是()
A.不确定的值B.形参p中存放的值
C.形参p所指存储单元中的值D.形参p的地址值
(知识点:
函数与指针;难度系数:
1;答案:
C)
3.若有定义:
int*p[3];,则以下叙述中正确的是()
A.定义了一个基类型为int的指针变量p,该变量具有三个指针
B.定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针
C.定义了一个名为*p的整型数组,该数组含有三个int类型元素
D.定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素
(知识点:
指针数组;难度系数:
1;答案:
B)
4.有以下程序
intmain()
{
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';语句都不正确
(知识点:
变量与指针;难度系数:
2;答案:
D)
5.若有如下定义chara[10],*p=a,则对a数组元素的正确引用是()。
A.*&a[5]B.a+2C.*(p+5)D.*(a+2)
(知识点:
数组与指针;难度系数:
1;答案:
D)
6.若有说明:
inti,j=2,*p=&i;,则能完成i=j赋值功能的语句是()
A.i=*p;B.*p=*&j;C.i=&j;D.i=**p;
(知识点:
变量与指针;难度系数:
1;答案:
B)
7.以下定义语句中,错误的是()
A.inta[]={1,2};B.char*a[3];
C.chars[10]="test";D.intn=5,a[n];
(知识点:
指针与数组;难度系数:
2;答案:
D)
8.以下不能正确进行字符串赋初值的语句是()
A.charstr[5]="good!
";B.charstr[]="good!
";
C.char*str="good!
";D.charstr[5]={'g','o','o','d'};
(知识点:
数组与指针;难度系数:
1;答案:
A)改为charstr[6]="good!
";
9.若有以下定义和语句:
ints[4][5],(*ps)[5];
ps=s;
则对s数组元素的正确引用形式是()
A.ps+1B.*(ps+3)C.ps[0][2]D.*(ps+1)+3
(知识点:
数组与指针;难度系数:
3;答案:
C)
10.若有说明:
intn=2,*p=&n,*q=p;,则以下非法的赋值语句是()。
A)p=q;B)*p=*q;C)n=*q;D)p=n;
(知识点:
指针的定义;难度系数:
1;答案:
D)
11.设有说明int(*p)[M];其中的标识符p是()
A.M个指向整型变量的指针
B.指向M个整型变量的函数指针
C.一个指向具有M个整型元素的一维数组的指针
D.具有M个指针元素的一维指针数组,每个元素只能指向整型量
(知识点:
指向数组的指针;难度系数:
2;答案:
C)
12.指针s所指字符串的长度为()。
char*s=″\t\″Name\\Address\n″;
A.19B.15C.18D.说明不合法
(知识点:
字符串;难度系数:
3;答案:
B)
13.与定义int*p[4]等价的是()。
A.intp[4]
B.int*(p[4])
C.int*p
D.int(*p)[4]
(知识点:
指针数组;难度系数:
2;答案:
B)
14.设有定义”inta=3,b,*p=&a;”,则下列语句中使b不为3的语句是()。
A.b=*&a;B.b=*a;C.b=a;D.b=*p;
(知识点:
指针的定义;难度系数:
1;答案:
B)
15.已知:
int*p();p是()。
A.指向int型的指针变量
B.int型的指针数组
C.一个指向函数的指针变量,函数的返回值是int型
D.一个函数,该函数的返回值是指向int型的指针变量
(知识点:
指针与函数;难度系数:
1;答案:
D)
16.设有说明int(*p)[M];其中的标识符p是()
A.M个指向整型变量的指针
B.指向M个整型变量的函数指针
C.一个指向具有M个整型元素的一维数组的指针
D.具有M个指针元素的一维指针数组,每个元素只能指向整型量
(知识点:
指向数组的指针;难度系数:
2;答案:
C)
17.以下选项中,不能正确赋值的是()
A.chars1[10];s1="Ctest";
B.chars2[]={'C','t','e','s','t'};
C.chars3[20]="Ctest";
D.char*s4="Ctest\n"
(知识点:
指针与数组;难度系数:
2;答案:
A)
18.若有以下定义:
chars[20]="programming",*ps=s;
则不能代表字符o的表达式是()
A.ps+2
B.s[2]
C.ps[2]
D.ps+=2,*ps
(知识点:
指针与数组;难度系数:
1;答案:
A)
19.下面程序的输出是()
intmain()
{
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=3
B.k=3a=3b=2
C.k=2a=3b=2
D.k=2a=2b=3
(知识点:
指针定义;难度系数:
3;答案:
C)
20.若有以下的定义:
inta[]={1,2,3,4,5,6,7,88,9,10),*p=a;
则值为3的表式是()
A.p+=2,*(p++)
B.p+=2,*++p
C.p+=3,*kp++
D.p+=2,++*p
(知识点:
指针与数组;难度系数:
1;答案:
C)
21.若有以下定义和语句:
intw[2][3],(*pw)[3];pw=w;
则对w数组元素非法引用是()
A.*(w[0]+2)
B.*(pw+1)[2]
C.pw[0][0]
D.*(pw[1]+2)
(知识点:
指针与数组;难度系数:
3;答案:
B)
22.设有如下定义:
intarr[]={6,7,8,9,10};
int*ptr;
则下列程序段的输出结果为()
ptr=arr;
*(ptr+2)+=2;
printf("%d,%d\n",*ptr,*(ptr+2));
A.8,10B.6,8C.7,9D.6,10
(知识点:
指针与数组;难度系数:
3;答案:
D)
23.执行以下程序段后,m的值为()
inta[2][3]={{1,2,3},{4,5,6}};
intm,*p;
p=&a[0][0];
m=(*p)*(*(p+2))*(*(p+4));
A.15B.14C.13D.12
(知识点:
指针与数组;难度系数:
2;答案:
A)
24.有以下程序段
union
{
intk;
chari[2];
}*s,a;
intmain()
{
s=&a;
s->i[0]=0x39;
s->i[1]=0x38;
printf("%x\n",s->k);
}
输出结果是()
A.3839B.3938C.380039D.390038
(知识点:
变量与指针;难度系数:
2;答案:
D)
25.设有如下定义:
int(*ptr)();
则以下叙述中正确的是()
A.ptr是指向一维组数的指针变量
B.ptr是指向int型数据的指针变量
C.ptr是指向函数的指针,该函数返回一个int型数据
D.ptr是一个函数名,该函数的返回值是指向int型数据的指针
(知识点:
函数指针;难度系数:
1;答案:
C)
26.有以下程序
intmain()
{
chara[]="programming",b[]="language";
char*p1,*p2;
inti;
p1=a;p2=b;
for(i=0;i<7;i++)
if(*(p1+i)==*(p2+i))
printf("%c",*(p1+i));
}
输出结果是()
A.gmB.rgC.orD.ga
(知识点:
指针与数组;难度系数:
3;答案:
D)
27.若有说明:
long*p,a;则不能通过scanf语句正确给输入项读入数据的程序段是()
A.*p=&a;scanf("%ld",p);
B.p=(long*)malloc(8);scanf("%ld",p);
C.scanf("%ld",p=&a);
D.scanf("%ld",&a);
(知识点:
变量与指针;难度系数:
2;答案:
A)
28.设已有定义:
char*st="howareyou";下列程序段中正确的是()
A.chara[11],*p;strcpy(p=a+1,&st[4]);
B.chara[11];strcpy(++a,st);
C.chara[11];strcpy(a,st);
D.chara[],*p;strcpy(p=&a[1],st+2);
(知识点:
指针与数组;难度系数:
1;答案:
B)
29.已知:
chars[4]=”cba”;char*p;执行下面语句
p=s;printf(“%c\n”,*p+1);其输出为()。
A.字符’c’B.字符’b’C.字符’a’D.字符’d’
(知识点:
指针与数组;难度系数:
2;答案:
D)
30.已知:
inta[3][4],(*p)[4]=a;p+=6;那么与*p的值相同的是()
A.*(a+6)B.*(&a[0]+6)C.*(a[1]+2)D.*(&a[0][0]+6)
(知识点:
指针与数组;难度系数:
2;答案:
A)
31.如下函数
fun(int*p1,*p2)
{
int*p;
*p=*p1;
*p1=*p2;
*p2=*p;
}
该程序功能为:
()。
A.正确,但无法改变*p1和*p2的值
B.能够成功交换*p1和*p2的值
C.能够成功交换*p1和*p2的地址
D.因为使用了空指针,可能造成系统故障
(知识点:
指针作为函数参数;难度系数:
1;答案:
D)
二、多项选择题
1.若有以下说明和语句,且0≤i<10,
inta[]={1,2,3,4,5,6,7,8,9,0};
int*p,i;
p=a;
则对数组元素的正确引用是()。
A.*(a+i)B.a[p-a]C.p+iD.*(&a[i])
(知识点:
数组与指针;难度系数:
1;答案:
ABD)
2.若有定义:
char*p1,*p2,*p3,*p4,ch;则能正确赋值的程序语句为()
A.p1=&ch;scanf(″%c″,p1);
B.p2=(char*)malloc
(1);scanf(″%c″,p2);
C.p3=getchar();
D.p4=&ch;*p4=getchar();
(知识点:
指针的定义;难度系数:
1;答案:
ABD)
3.strcpy库函数用于复制一个字符串。
若有以下定义:
char*str1=”copy”,str2[10],*str3=”hijklmn”,*str4,*str5=”abcd”;
则对strcpy库函数的正确调用是()
(A)strcpy(str2,str1)(B)strcpy(str3,str1)(C)strcpy(str4,str1)
(D)strcpy(str5,str1)(E)strcpy(str1,str5)
(知识点:
字符串处理函数;难度系数:
1;答案:
ABDE)
4.设有以下语句,则()是对a数组元素的正确引用。
Chara[]=”qwertyu”,*p=a;
A.a[p-a]B.*(&a[5])C.*(*(a+5))D.(p+1)[3]
(知识点:
指针与数组;难度系数:
1;答案:
ABD)
5.若有定义:
inta[3][4],*p=&a[0][0];则对a数组元素的正确引用的有()
A.*(p+i)B.*(*a+2)C.**a+2D.*(a+2)
(知识点:
指针与数组;难度系数:
2;答案:
AB)
6.对于C语言字符数组,以下说法正确的是()。
A.可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值
B.可以用关系运算符对字符数组中的字符串进行比较
C.字符数组可以存放字符串
D.字符数组中的字符串不可以整体输入、输出
(知识点:
字符数组;难度系数:
1;答案:
ACD)
7.不合法的数组定义是()。
A.ints[]="japanes"
B.ints[2]={0,2,4};
C.chars="string"
D.chars[]={"0,1,2,3,4,5"};
(知识点:
字符数组;难度系数:
1;答案:
ABC)
8.若有语句:
charsl[]="string1",s2[8],*s3,*s4="string2";则()
是对库函数strcpy的正确调用。
A.strcpy(sl,"string2");
B.strcpy(s4,"string1");
C.strcpy(s3,"string1")
D.strcpy("string2",s2);
(知识点:
字符串处理函数;难度系数:
1;答案:
ABC)
9.对两个数组s1和s2进行如下初始化
chars1[]="chinese";
chars2[]={'c','h','i','n','e','s','e'};
则以下叙述错误的是()。
A.s1与s2数组完全相同
B.s1与s2长度相同
C.s1和s2中都存放字符串
D.s1数组比s2数组占用内存大
(知识点:
字符数组;难度系数:
1;答案:
ABC)
10.下列语句段,错误的是()。
A.staticstr[]={"ilikethis"};
B.char*p="ilikethis"
C.char*p;strcpy(p,"ilikethis");
D.charstr[13];str[]="ilikethis";
(知识点:
字符数组与字符指针;难度系数:
1;答案:
ACD)
11.下列语句正确的是()。
A.int*str[10];B.char**p;
C.char*s(),*p;D.int*p,a;x=10;*p=&a;
(知识点:
指针的定义;难度系数:
1;答案:
ABC)
12.若已定义a为int型变量,则()是对指针变量p的错误说明和初始化。
A.int*p=aB.int*p=*a;
C.intp=&aD.int*p=&a;
(知识点:
指针的定义;难度系数:
1;答案:
ABC)
13.设有如下定义:
char*s[2]={"love","niha"};
则以下说法错误的是()。
A.s数组元素的值分别是"love"和"niha"
B.s数组的两个元素中各自存放了字符'l'和'n'的地址
C.s数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址
D.s是指针变量,它指向含有两个数组元素的字符型一维数组
(知识点:
指针数组;难度系数:
2;答案:
ABC)
14.若有说明语句:
inti,x[3][4];则以下关于x,*x、x[0]、&x[0][0]的错误描述是()。
A.x、*x、x[0]、&x[0][0]均表示元素x[0][0]的地址
B.只有x、x[0]和&x[0][0]表示的是元素x[0][0]的地址
C.只有x[0]和&x[0][0]表示的是元素x[0][0]的地址
D.只有&x[0][0]表示的是元素x[0][0]的地址
(知识点:
指针与数组;难度系数:
1;答案:
BCD)
15.以下说法中正确的是()。
A.指针可以进行加、减等算术运算
B.指针中存放的是地址值
C.指针是一个变量
D.指针变量不占用存储空间
(知识点:
指针运算;难度系数:
1;答案:
ABC)
16.设有charstr1[20],str2[20],b,则下列语句不正确的是()。
A.str1={"mylove"};str2=str1;
B.b="mn";
C.str1={"mylove"};str2={"dog"};strcpy(str1,str2);
D.b='a';
(知识点:
指针与数组;难度系数:
1;答案:
ABC)
17.若有说明语句:
inti,x[3][4];则能将x[1][1]的值赋给变量i的语句是()。
A.i=*(*(x+1)+1)B.i=x[1][1]
C.i=*(*(x+1))D.i=*(x[1]+1)
(知识点:
指针与数组;难度系数:
2;答案:
ABD)
18.变量a的值为12,a的地址为2000,若欲使p为指向a的指针变量,则下列赋值不正确的是()。
A.&a=3B.*p=12
C.*p=2000D.p=&a
(知识点:
指针的定义;难度系数:
1;答案:
ABC)
19.对函数调用strcat(strcpy(s1,s2),s3)功能描述错误的是()。
A.将串s1复制到串s2中后再连接到串s3之后
B.将串s1连接到串s2中后再复制到串s3之后
C.将串s2复制到串s1中后再将串s3连接到s1之后
D.将串sr2复制到串s1中后再将串s1复制到s3中
(知识点:
字符串处理函数;难度系数:
2;答案:
ABD)
20.下列说法正确的是()。
A.字符数组由若干元素组成,每个元素中放一个字符
B.对数组赋初值要用static存储类别
C.字符指针变量中存放的是地址
D.对字符指针变量赋初值要用static存储类别
(知识点:
字符数组与字符指针;难度系数:
1;答案:
ABC)
21.若有以下语句,且0<=k<6,则()是对数组元素地址的不正确表示。
staticintx[]={1,3,5,7,9,11}.*ptr,k;
ptr=x;
A.x++B.&ptr
C.&ptr[k]D.&(x+1)
(知识点:
指针运算;难度系数:
1;答案:
ABD)
22.若有以下定义:
chars[20]="tropetry",*p=s;
则能代表字符o的表达式是()。
A.p+2B.s[2]
C.p[2]D.p+=2,*p
(知识点:
指针与数组;难度系数:
1;答案:
BCD)
23.若有以下定义和语句:
charstr[]="string",str2[8],*str3,*str4="string";
库函数strcpy用以复制字符串。
则以下对库函数strcpy的正确调用是()。
A.strcpy(str1,"girl1");
B.strcpy(str2,"girl2");
C.strcpy(str3,"girl3");
D.strcpy(str4,"girl4");
(知识点:
字符串处理函数;难度系数:
1;答案:
ABD)
24.若有语句int(*ptr)();则关于ptr错误的是()。
A.ptr是指向一维数组的指针变量。
B.ptr是指向int型数据的指针变量。
C.ptr是指向函数的指针,该函数返回一个int型数据。
D.ptr是一个函数名,该函数的返回值是指向int型数据的指针。
(知识点:
函数指针;难度系数:
1;答案:
ABD)
25.若有说明语句:
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
(知识点:
指针运算;难度系数:
1;答案:
BCD)
26.若有说明:
intx,*pb;
那么程序中对pb错误赋值的表达式应该是()。
A.*pb=&xB.pb=xC.pb=&xD.*pb=*x
(知识点:
指针的定义;难度系数:
1;答案:
ABD)
27.若有说明:
intj,k=7,*p=&j;
则与j=k;不等价的语句是()。
A.j=*p;B.*p=*&k;C.j=&k;D.j=**p;
(知识点:
指针的定义;难度系数:
1;答案:
ACD)
28.main(argc,argv)中形式参数argv的错误说明形式为()。
A.char*argv[]
B.charargv[][]
C.charargv[]
D.char*argv
(知识点:
带参数的主函数;难度系数:
1;答案:
BCD)
29.已知函数说明语句“void*f();”,则它的含义错误是()。
A.函数f的返回值是一个通用型指针
B.函数f的返回值可以是任意的数据类型
C.函数f无返回值
D.指针f指向一个函数,该函数无返回值
(知识点:
返回指针的函数;难度系数:
1;答案:
BCD)
30.若用数组名作为函数调用的实参,传递给形参的错误描述是()。
A.数组的首地址
B