第十章 指针练习题.docx
《第十章 指针练习题.docx》由会员分享,可在线阅读,更多相关《第十章 指针练习题.docx(12页珍藏版)》请在冰豆网上搜索。
![第十章 指针练习题.docx](https://file1.bdocx.com/fileroot1/2022-10/29/37bcc34d-018f-4035-8133-e470b8744908/37bcc34d-018f-4035-8133-e470b87449081.gif)
第十章指针练习题
第10章指针
同步练习一
一、选择题(在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项填涂在答题卡相应位置上。
)
10.1若有下面的程序段:
chars[]="china";char*p;p=s;
则下列叙述正确的是
A)s和p完全相同
B)数组s中的内容和指针变量p中的内容相等
C)s数组长度和p所指向的字符串长度相等
D)*p与s[0]相等
正确答案:
D
10.2若有语句int*point,a=4;和point=&a;下面均代表地址的一组选项是
A)a,point,*&aB)&*a,&a,*point
C)*&point,*point,&aD)&a,&*point,point
正确答案:
D
10.3下列程序执行后的输出结果是
voidfunc(int*a,intb[])
{b[0]=*a+6;}
main()
{inta,b[5];
a=0;b[0]=3;
func(&a,b);printf("%d\n",b[0]);
}
A)6B)7C)8D)9
正确答案:
A
10.4已定义以下函数
fun(char*p2,char*p1)
{while((*p2=*p1)!
='\0'){p1++;p2++;}
}
函数的功能是
A)将p1所指字符串复制到p2所指内存空间
B)将p1所指字符串的地址赋给指针p2
C)对p1和p2两个指针所指字符串进行比较
D)检查p1和p2两个指针所指字符串中是否有'\0'
正确答案:
A
10.6下面说明不正确的是
A)chara[10]="china";B)chara[10],*p=a;p="china"
C)char*a;a="china";D)chara[10],*p;p=a="china"
正确答案:
D
10.8执行以下程序后,a,b的值分别为
main()
{inta,b,k=4,m=6,*p1=&k,*p2=&m;
a=p1==&m;
b=(*p1)/(*p2)+7;
printf("a=%d\n",a);
printf("b=%d\n",b);
}
A)-1,5B)1,6C)0,7D)4,10
正确答案:
C
10.10以下程序有错,错误原因是
main()
{int*p,i;char*q,ch;
p=&i;
q=&ch;
*p=40;
*p=*q;
......
}
A)p和q的类型不一致,不能执行*p=*q;语句
B)*p中存放的是地址值,因此不能执行*p=40;语句
C)q没有指向具体的存储单元,所以*q没有实际意义
D)q虽然指向了具体的存储单元,但该单元中没有确定的值,所以执行*p=*q;没有意义,可能会影响后面语句的执行结果
正确答案:
D
10.11下面程序段的运行结果是
chara[]="lanuage",*p;
p=a;
while(*p!
=′u′){printf("%c",*p-32);p++;}
A)LANGUAGEB)languageC)LAND)langUAGE
正确答案:
C
10.12有以下语句,则对a数组元素的引用不正确的是(0≤i≤9)
inta[10]={0,1,2,3,4,5,6,7,8,9},*p=a;
A)a[p-a]B)*(&a[i])C)p[i]D)*(*(a+i))
正确答案:
D
10.13函数fun的返回值是
fun(char*a,char*b)
{intnum=0,n=0;
while(*(a+num)!
=′\0′)num++;
while(b[n]){*(a+num)=b[n];num++;n++;}
returnnum;
}
A)字符串a的长度B)字符串b的长度
C)字符串a和b的长度之差D)字符串a和b的长度之和
正确答案:
D
10.15下面判断正确的是
A)char*a="china";等价于char*a;*a="china";
B)charstr[5]={"china"};等价于charstr[]={"china"};
C)char*s="china";等价于char*s;s="china";
D)charc[4]="abc",d[4]="abc";等价于charc[4]=d[4]="abc";
正确答案:
C
10.17有如下说明
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
正确答案:
B
10.19下列程序的运行结果是
voidfun(int*a,int*b)
{int*k;
k=a;a=b;b=k;
}
main()
{inta=3,b=6,*x=&a,*y=&b;
fun(x,y);
printf("%d%d",a,b);
}
A)63B)36C)编译出错D)00
正确答案:
B
10.20若有说明语句
chara[]="Itismine";
char*p="Itismine";
则以下不正确的叙述是
A)a+1表示的是字符t的地址
B)p指向另外的字符串时,字符串的长度不受限制
C)p变量中存放的地址值可以改变
D)a中只能存放10个字符
正确答案:
D
10.21以下程序的运行结果是
sub(intx,inty,int*z)
{*z=y-x;}
main()
{inta,b,c;
sub(10,5,&a);
sub(7,a,&b);
sub(a,b,&c);
printf("%4d,%4d,%4d\n",a,b,c);
}
A)5,2,3B)-5,-12,-7
C)-5,-12,-17D)5,-2,-7
正确答案:
B
10.23下面程序的输出结果是
#include
#include
main()
{char*p1="abc",*p2="ABC",str[50]="xyz";
strcpy(str+2,strcat(p1,p2));
printf("%s\n",str);
}
A)xyzabcABCB)zabcABC
C)xyabcABCD)yzabcABC
正确答案:
C
同步练习二
一、选择题(在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正确选项填涂在答题卡相应位置上。
)
10.1b下列关于指针变量赋空值的说法错误的是
A)当赋空值的时候,变量指向地址为0的存储单元
B)赋值语句可以表达为变量名=′\0′;
C)赋值语句可以表达为变量名=0;
D)一个指针变量可以被赋空值
正确答案:
A
10.4b下列程序是用来判断数组中特定元素的位置所在。
如果输入如下整数:
876675896101301401980431451777
#include
#include
intfun(int*s,intt,int*k)
{inti;
*k=0;
for(i=0;iif(s[*k]
returns[*k];
}
main()
{inta[10]={876,675,896,101,301,401,980,431,451,777},k;
clrscr();
fun(a,10,&k);
printf("%d,%d\n",k,a[k]);
}
则输出结果为
A)7,431B)6C)980D)6,980
正确答案:
D
10.6b有以下程序
#include
main()
{char*p="abcde\0fghjik\0";
printf("%d\n",strlen(p));
}
程序运行后的输出结果是
A)12B)15C)6D)5
正确答案:
D
10.8b阅读下面程序,执行后的结果为
#include"stdio.h"
voidfun(int*a,int*b)
{intk;
k=5;
*a=k;
*b=*a+k;}
main()
{int*a,*b,x=10,y=15;
a=&x;
b=&y;
fun(a,b);
printf("%d,%d\n",*a,*b);
}
A)10,15B)5,15C)5,10D)15,10
正确答案:
C
10.10b阅读下列程序,则执行后的结果为
#include"stdio.h"
main()
{intc[][4]={1,2,3,4,5,6,7,34,213,56,62,3,23,12,34,56};
printf("%x,%x\n",c[2][2],*(*(c+1)+1));
}
A)3e,6B)62,5C)56,5D)3E,6
正确答案:
A
10.12b现有如下程序段
#include"stdio.h"
int*fun(int*a,int*b)
{intc;
c=*a%*b;
return&c;
}
main()
{inta=5,b=19,*c;
c=fun(&a,&b);
printf("%d\n",++*c);
}
则程序段执行后的结果为
A)8B)7C)6D)5
正确答案:
C
10.13b现有inta,*b;,b=&a;,则下列运算错误的是
A)*&aB)&*aC)*&bD)&*b
正确答案:
B
10.14b现有如下定义语句
int*p,s[20],i;
p=s;
表示数组元素s[i]的表达式不正确的是
A)*(s+i)B)*(p+i)
C)*(s=s+i)D)*(p=p+i)
正确答案:
C
10.15b阅读如下程序段,这个程序在编译的时候会有一个警告,下列关于这个警告叙述正确的是
#include"stdio.h"
#defineN10
int*fun(inta[N],intn)
{inti,b[N];
for(i=0;ib[i]=a[i];
return(b);
}
main()
{inta[N]={12,34,45,5,6,34,4,655,2};
int*k;
k=fun(a[N],5);
printf("%d\n",*k);
}
A)指针k没有指向任何对象而成为“无向指针”,所以这里会产生警告
B)return语句不应该有括号,所以在这里会有警告
C)return语句的返回值类型与指针k的基类型不一致,这里会产生警告
D)数组赋值的时候没有把数组全部都赋初值,所以在这里会有警告
正确答案:
A
10.16b现有如下程序段
#include"stdio.h"
main()
{inta[5][6]={23,3,65,21,6,78,28,5,67,25,435,76,8,22,45,7,8,34,6,78,32,4,5,67,4,21,1};
inti=0,j=5;
printf("%d\n",*(&a[0][0]+2*i+j-2));
}
则程序的输出结果为
A)21B)78C)23D