1.下列关于定义一个指向double型变量的指针,正确的是( B )。
A.int a(5);double *pd=a; B.double d(2.5),*pd=&d;
C.double d(2.5),*pd=d; D.double a(2.5),pd=d;
2.下列关于创建一个int型变量的引用,正确的是( A )。
A.int a(3),&ra=a; B.int a(3),&ra=&a;
C.double d(3.1);int &rd=d; D.int a(3),ra=a;
3.下列关于指针概念的描述中,错误的是( B )。
A.指针中存放的是某变量或对象的地址值
B.指针的类型是它所存放的数值的类型
C.指针是变量,它也具有一个内存地址值
D.指针的值是可以改变的
4.下列关于引用概念的描述中,错误的是( A )。
A.引用是变量,它具有值和地址值
B.引用不可以作数组元素
C.引用是变量的别名
D.创建引用时必须进行初始化
5.已知:int a[5],*p=a;则与++*p相同的是( D )。
A.*++p B.a[0]
C.*p++ D.++a[0]
6.已知:int a[ ]={1,2,3,4,5},*p=a;在下列数组元素地址的表示中,正确的是( C )。
A.&(a+1) B.&(p+1)
C.&p[2] D.*p++
7.已知:int a(5),&ra=a;下列描述中,错误的是( D )。
A.ra是变量a的引用,即为变量的别名
B.ra的值为5
C.ra的地址值为&a
D.改变ra的值为10,变量a值仍为5
8若有以下定义,则说法错误的是( D )。
int a=100,*p=&a ;
A.声明变量p,其中*表示p是一个指针变量
B.变量p经初始化,获得变量a的地址
C.变量p只可以指向一个整形变量
D.变量p的值为100
9若有以下定义,则赋值正确的是(C )。
int a ,b , *p;
float c, *q;
A.p=&c B.q=p C.p=NULL D.q=new int
10如果x是整型变量,则合法的形式是( D )。
A.&(x+5) B.*x C.&*x D.*&x
11若要建立如下关系,错误的语句组是( A )。
A.int *p=&x, x; *p=10; B. int x, *p=&x; *p=10;
C.int *p, x=10; p=&x; D.int *p, x; p=&x ; x=10;
12若有语句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])
13以下程序的输出结果是( B )。
#include <iostream.h>
void main()
{ int a[3]={10,15,20}; // a[0]=10,a[1]=15,a[2]=20
int *p1=a,*p2=&a[1]; // p1取a[0]地址,p2取a[1]地址
*p1=*(p2-1)+5; // a[0]=15,a[1]=15,a[2]=20
*(p1+1)=*p1-5; // a[0]=15,a[1]=10,a[2]=20
cout<<a[1]<<endl;
}
A.5 B.10 C.15 D.20
14以下程序的输出结果是( C )。
#include <iostream.h>
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<<c<<","<<d<<endl;
return 0;
}
A.50,30 B.30,50 C.80,-20 D.80,20
15要求函数的功能是交换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; }
16以下程序的输出结果是( C )。
#include <iostream.h>
void main()
{ char *s="12134211";
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<<v1<<","<<v2<<","<<v3<<","<<v4<<endl;
}
A.4,2,1,1 B.4,9,3,1 C.5,8,6,1 D.8,8,8,8
答案:C
分析:C++语言中的switch语句中,如果没有break语句,一旦满足某一条件进入,就一直运行到switch的结束,如在本题s[1]=’1’,除v1加1之外,v2和v3都要加1。故运行结果是“5,,8,6,1”,选择C。如果程序做下面修改:
switch(s[k])
{ default:v4++; break;
case '1':v1++; break;
case '3':v3++;break;
case '2':v2++;break;
}
运行结果是“4,2,1,1”,选择A。