第六章 指针练习题
知识点:
1.掌握指针、地址、指针类型等概念;
2.掌握指针变量的定义和初始化、指针的间接访问、指针的加减运算、指针变量比较运算和指针表达式;
3.掌握指针与数组、函数、字符串等的联系; 4.掌握引用参数的使用。
一、选择题
1.若有以下定义,则说法错误的是( D)。 int a=100,*p=&a ;
A.声明变量p,其中*表示p是一个指针变量 B.变量p经初始化,获得变量a的地址 C.变量p只可以指向一个整形变量 D.变量p的值为100
2. 若有以下定义,则赋值正确的是(C )。 int a ,b , *p; float c, *q;
A.p=&c B.q=p C.p=NULL D.q=new int
3. 如果x是整型变量,则合法的形式是( D )。
A.&(x+5) B.*x C.&*x D.*&x
4. 若有语句int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则( B )不是对a数组元素的正确引用(其中0≤i<10)。
A.p[i] B.*(*(a+i)) C.a[p-a] D.*(&a[i])
5. 以下程序的输出结果是( B )。 #include
{ int a[3]={10,15,20}; int *p1=a,*p2=&a[1]; *p1=*(p2-1)+5; *(p1+1)=*p1-5; cout<
A.5 B.10 C.15 D.20
6. 执行以下程序段后,m的值为 ( A)。 int a[2][3]={{1,2,3},{4,5,6}}; int m,*p=&a[0][0];
m=(*p)*(*(p+2))*(*(p+4));
1
A.15 B.14 C.13 D.12
7. 以下程序的输出结果是(C )。 #include
void fun(int x,int y,int *cp,int *dp) { *cp=x+y; *dp=x-y; }
int main() { int a,b,c,d; a=30,b=50; fun(a,b,&c,&d);
cout< A.50,30 B.30,50 C.80,-20 D.80,20 8. 要求函数的功能是交换x和y中的值,且通过正确调用返回交换结果。能正确执行此功能的函数是( A )。 A.funa(int *x,int *y) B.funb(int x,int y) { int *p=new int ; { int t; *p=*x; t=x; *x=*y; x=y; *y=*p; y=t; } } C.func(int *x,int *y) D.fund(int x,int y) { *x=*y; { *x=*x+*y; *y=*x; *y=*x-*y; } *x=*x-*y; } 9. 以下程序的输出结果是(C)。 #include { char *s=\int v1=0,v2=0,v3=0,v4=0; for (int k=0;s[k]; k++) switch(s[k]) { default: v4++; case '1': v1++; case '3': v3++; case '2': v2++; } cout< 2 } A.4,2,1,1 B.4,9,3,1 C.5,8,6,1 D.8,8,8,8 10. 若有如下语句: int **pp, *p, a=10, b=20; pp=&p; p=&a; p=&b; cout<<*p<<”,”<<**pp< A.10,20 B.10,10 C.20,10 D.20,20 11.若有以下定义,则变量p所占内存空间的字节数是( C )。 float *p; A.1 B.2 C.4 D.8 12.若有以下定义,则赋值错误的是( A )。 int a,*p,*q; A. *p=&a ; B.p=new int ; C.q=NULL; D.p=q 13. 下列程序运行结果是( B )。 #include cout<<\else q=&a; cout<<*q< A. #### B.10 C. 有语法错误 D.*q 14. 若程序段static char line[]=”Visual C++”; char *point=line;则输出point的值为( A)。 A. ”Visual C++” B. line的首地址 C. Visual D. \\0 15. 相同数据类型的数组名和指针变量均表示地址,以下不正确的说法是( D )。 A. 数组名代表的地址不变,指针变量存放的地址可变。 B. 数组名代表的存储空间不变,指针变量指向的存储空间长度可变。 C. A和B的说法均正确。 D. 没有差别。 16. 若有以下定义,则下列操作错误的是( B )。 3 int a[5]={1,3,5,7,9}, *p=new int [5]; A.p=a; B.*p=a; C.*(p+1)=a[1]; D.*p=*a 17. 若有以下定义,则释放指针所指内存空间的操作是( C )。 int *p=new int [10]; A.delete []p; B.delete *p C.delete p; D. delete p[] 18. 若有以下定义,下列值为6的表达式是(C )。 int a[3][5]={{1,2},{2,4,6,8},{10,20,30,40,50}}; A.*(a+2)+3 B.a[2][3] C.*(*(a+1)+2) D.*(*(a+2)+3) 19. 执行下列程序段后,字符串str1的值是( C )。 char str1[8] , str2[]=”AA\\0BB”; strcpy(str1,str2); A. AA\\0BB B. AA BB C. AA D.AA\\0BB\\0 二、写出下列程序运行结果: 1. #include { int *pn, n=10,m=20; float *pf, px=3.14159,py=2.71828; pn=&n; *pn+=m; cout<<”n 现在的值是: ”<<*pn< cout<<”py现在的值是:”< 2. 写出下列程序运行结果: #include { int I,*p,a[]={10,20,30,40,50,60}; p=a; for(I=0;I<5;I++) cout<<”a[“<<<’\\t’<<”*(p+”< 3. 写出下列程序运行结果: #include { int x=100,y=200; int *p=&x; 4 (*p)++; p=&y; *p=x; cout< 4. 写出下列程序运行结果: #include { int a[]={10,20,30,40,50,60,70,80,90,100}; int i,*p,sum=0; p=a; for(i=1;i<10;i=i+2) sum+=p[i]; cout<<\} 5. 写出下列程序运行结果: #include { float b[][4]={1.0,2.0,1.2,3.0,4.0,3.1,1.6,1.7,1.8,1.9,2.0,2.1}; float *p,sum=1.0; int i; p=&b[0][1]; for(i=0;i<3;i++) { sum=sum*(*(p+i)); cout<<\} } 6. 写出下列程序运行结果: #include { char *b[]={\char *p; p=b[2]; cout<<*p<<'\\t'<<*b< 7. 写出下列程序运行结果: #include { int i,a[]={10,20,30,40},*p[4],**q; for(i=0;i<4;i++) 5