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