C *p<*a[0]
D *p[0]<*a[0]
参考答案
B
26若有定义语句int(*p)[M];其中的标识符p是
A M个指向整型变量的指针;
B 指向M个整型变量的函数指针;
C 一个具有M个整型元素的一维数组的指针变量;
D 具有M个指针元素的一维指针数组,每个元素都只能指向整型变量;
参考答案
C
27下面叙述中不正确的是
A 预处理命令行都必须以#号开始;
B 在程序中凡是以#号开始的语句都是预处理命令行;
C C程序在执行过程中对预处理命令行进行处理;
D 以下是正确的宏定义#defineIBM_PC
参考答案
C
28下面叙述中正确的是
A 在程序的一行上可以出现多个有效的预处理命令行;
B 使用带参的宏时,参数的类型应与宏定义时的一致;
C 宏替换不占用运行时间,只占编译时间;
D 在以下定义中CR是称为“宏名”的标识符;
参考答案
C
29设有inta[]={10,11,12},*p=&a[0];则执行完*p++;*p+=1;后a[0],a[1],a[2]的值依次是
A 10,11,12
B 11,12,12
C 10,12,12
D 11,11,12
参考答案
C
30若有以下说明和语句,inta[]={1,2,3,4,5,6,7,8,9,0},*p,i;p=a;
且0<=i<10,则下面哪个是对数组元素地址的正确表示。
A &(a+1)
B a++
C &p
D &p[i]
参考答案
D
31若有以下说明和语句,inta[10],*p1,*p2;p1=a;p2=&a[5];则p1-p2的值为。
A 4
B 5
C 6
D 没有指针与指针的减法
参考答案
B
32已知有以下的说明:
inta[]={8,1,2,5,9,4,7,6,0,3};则a[*(a+a[3])]的值为
A 9
B 5
C 0
D 1
参考答案
A
33设有说明intk[2]={2,3},*p=&k[0];则下列错误的C语句是
A k+=1;
B p+=1;
C *p++;
D (*P)++;
参考答案
A
34若有以下说明和语句,inta[]={1,2,3,4,5,6,7,8,9,0},*p,i;p=a;
且0<=i<10,则下面哪个是对数组元素的错误引用
A *(a+i)
B a[p-a]
C p+i
D *(&a[i])
参考答案
C
35已知有以下的说明,floata[3]={1.2,45.6,-23.0};float*p=a;那么执行语句a=p+a;后,a[0]的值等于
A 1.2
B 45.6
C –23.0
D 语句有错
参考答案
D
36设有说明ints[2]={0,1},*p=s;则下列错误的C语句是
A s+=1;
B p+=1;
C *p++;
D (*P)++;
参考答案
A
37设有说明inta[]={3,2,0,1,4,5,9,8,6};则a[*(a+a[4])]的值为
A 4
B 3
C 2
D 1
参考答案
A
38若有下面程序段,则正确的输出是______。
char*p=”break”,a[10]={‘a’,’b’,’c’,’d’};
printf(“%c,%c,%c,%c”,*(p+1),p[2],*(a+2),a[1]);
A e,k,b,c
B r,a,a,b
C r,e,c,b
D 有语法错,无正确输出
参考答案
C
39若有以下说明:
intm[]={1,2,3,4,5,6,7,8},*p=m;则数值为7的表达式是
A *p+7
B p+6
C *p+=6
D *(p+7)
参考答案
C
40若有以下说明,且0<=i<5,则____是对数组元素的错误引用。
inta[]={10,20,30,40,50};
int*p=a,i;
A *(&a[i])
B a[p+i]
C *(p+i)
D *(a+i)
参考答案
B
41假定P1和P2是已赋值的字符指针,则下述有关运算中,____是非法的。
A *P1=*P1+*P2
B *P1+=100-*P2
C P2=P1/2
D *P2=*P1-‘A’
参考答案
C
42若有以下说明:
intm[5]={2,4,6,8,10},*p=m;则数值为8的表达式是
A *p+8
B p+8
C *p+=6
D *(p+6)
参考答案
C
43若有以下说明:
inta[]={10,20,30,40,50};int*p=a,i;且0<=i<5,则____是对数组元素地址的正确表示。
A a++
B &p
C p++
D p[i]
参考答案
C
44若有以下说明:
floatx,y=8.0,*pf=&x;则与x=y;等价的语句是
A x=*pf;
B *pf=*&y;
C x=&y;
D x=**pf;
参考答案
B
45对于基类型相同的两个指针变量之间,不能进行的运算是
A <
B =
C +
D -
参考答案
C
46有如下说明
inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
则数值为9的表达式是
A *P+9
B *(P+8)
C *P+=9
D P+8
参考答案
B
47下列程序段的输出结果是
voidfun(int*x,int*y)
{
printf("%d%d",*x,*y);
*x=3;
*y=4;
}
main()
{
intx=1,y=2;
fun(&y,&x);
printf("%d%d",x,y);
}
A 2143
B 1212
C 1234
D 2112
参考答案
A
48下列程序的输出结果是
main()
{chara[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5;
printf("%d",*--p);
}
A 非法
B a[4]的地址
C 5
D 3
参考答案
C
49若定义了以下函数:
voidf(……)
{……
*p=(double*)malloc(10*sizeof(double));
……
}
p是该函数的形参,要求通过p把动态分配存储单元的地址传回主调函数,则形参p的正确定义应当是
A double*p
B float**p
C double**p
D float*p
参考答案
C
50以下只有在使用时才为该类型变量分配内存的存储类说明是
A auto和static
B auto和register
C register和static
D extern和register
参考答案
B
51已知函数定义如下:
floatfun1(intx,inty)
{
floatz;
z=(float)x/y;
return(z);
}
主调函数中有inta=1,b=0;可以正确调用此函数的语句是
A printf("%f",fun1(a,b));
B printf("%f",fun1(&a,&b));
C printf("%f",fun1(*a,*b));
D printf("%f",fun1(b,a));
参考答案
D
52设有说明int(*p)[4];其中的标识符p是
A 4个指向整型变量的指针变量
B 指向4个整型变量的函数指针
C 一个指向具有4个整型元素的一维数组的指针
D 具有4个指向整型变量的指针元素的一维指针数组
参考答案
C
53已知:
chars[100];inti;则引用数组元素的错误的形式是
A s[i+10]
B *(s+i)
C *(i+s)
D *((s++)+i)
参考答案
D
54已知:
chars[6],*ps=s;则正确的赋值语句是
A s="12345";
B *s="12345";
C ps="12345";
D *ps="12345";
参考答案
C
55已知:
chara[3][10]={"BeiJing","ShangHai","TianJin"},*pa=a;不能正确显示字符串"ShangHai"的语句是
A printf("%s",a+1);
B printf("%s",*(a+1));
C printf("%s",*a+1);
D printf("%s",&a[1][0]);
参考答案
C
56已知:
inta[]={1,2,3,4,5,6,7,8,9,10,11,12},*p=a;则值为3的表达式是
A p+=2,*(p++)
B p+=2,*++p
C p+=2,*p++
D p+=2,++*p
参考答案
A
57已知:
inta[]={1,3,5,7},y*p=a;为使变量y的值为3,下列语句正确的是
A y=++*p++;
B y=++(*p++);
C y=(++*p)++;
D y=(*++p)++;
参考答案
D
58已知:
intx[]={1,3,5,7,9,11},*ptr=x;则能够正确引用数组元素的语句是
A x
B *(ptr--)
C x[6]
D *(--ptr)
参考答案
B
59已知charstr[]="OK!
";对指针变量ps的说明和初始化是
A charps=str;
B char*ps=str;
C charps=&str;
D char*pa=&str;
参考答案
B
60已知inta[3][4],*p=a;p+=6;那么与*p的值相同的是______。
A *(a+6)
B *(&a[0]+6)
C *(a[1]+=2)
D *(&a[0][0]+6)
参考答案
D
61已知inti=0,j=1,*p=&i,*q=&j;错误的语句是
A i=*&j;
B p=&*&i;
C j=*p++;
D i=*&q;
参考答案
D
62若有说明语句:
inta,b,c,*d=&c;,则能正确从键盘读入三个整数分别赋给变量a、b、c的语句是
A scanf("%d%d%d",&a,&b,d);
B scanf("%d%d%d",&a,&b,&d);
C scanf("%d%d%d",a,b,d);
D scanf("%d%d%d",a,b,*d);
参考答案
A
63若定义:
inta=511,*b=&a;,则printf("%d\n",*b);的输出结果为
A 无确定值
B a的地址
C 512
D 511
参考答案
D
64若指针p已正确定义,要使p指向两个连续的整型动态存储单元,不正确的语句是
A p=2*(int*)malloc(sizeof(int));
B p=(int*)malloc(2*sizeof(int));
C p=(int*)malloc(2*2);
D p=(int*)calloc(2,sizeof(int));
参考答案
A
65有以下程序
main()
{
inti,s=0,t[]={1,2,3,4,5,6,7,8,9};
for(i=0;i<9;i+=2)
s+=*(t+i);
printf(“%d\n”,s);
}
程序执行后的输出结果是
A 45
B 20
C 25
D 36
参考答案
C
66有以下程序
main()
{
inti,s=0,t[]={1,2,3,4,5,6,7,8,9};
for(i=0;i<9;i+=2)
s+=*(t+i);
printf(“%d\n”,s);
}
程序执行后的输出结果是
A 45
B 20
C 25
D 36
参考答案
C
67
已知charx[5],*y=x;则正确的赋值语句是
A *y=“abcd”
B *x=“abcd”
C y=“abcd”
D x=“abcd”
参考答案
C
68已知:
int*p,a;则语句“p=&a;”中的运算符“&”的含义是
A 位与运算
B 逻辑与运算
C 取指针内容
D 取变量地址
参考答案
D
69已知:
inta,*p=&a;则下列赋值语句错误的是
A scanf(“%d”,&a);
B scanf(“%d”,*p);
C printf(“%d”,a);
D printf(“%d”,*p);
参考答案
B
70已知:
chars[10],*p=s,则在下列语句中,错误的语句是
A p=s+5;
B s=p+s;
C s[2]=p[4];
D *p=s[0];
参考答案
B
71已知:
intx则下面指针变量的语句正确的是
A intpb=&x;
B int*pb=x;
C int*pb=&x;
D *pb=*x;
参考答案
C
72以下语句或语句组中,能正确进行字符串赋值的是
A char*sp;*sp="right!
";
B chars[10];s="right!
";
C chars[10];*s="right!
";
D char*sp="right!
";
参考答案
D
73程序中若有如下的说明和定义语句
charfun(char*);
main()
{
char*s="one",a[5]={0},(*f1)()=fun,ch;
……
}
以下选项中对函数fun的正确调用语句是
A (*f1)(a);
B *f1(*s);
C fun(&a);
D ch=*f1(s)
参考答案
A
74若有语句:
char*line[5];,以下叙述中正确的是
A 定义line是一个数组,每个数组元素是一个基类型为char的指针变量
B 定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组
C 定义line是一个指针数组,语句中的*号称为间址运算符
D 定义line是一个指向字符型函数的指针
参考答案
A
75设有定义:
intn1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与n2=n1;语句等价的
A *p=*q;
B p=q;
C *p=&n1;
D p=*q;
参考答案
A
76若有定义:
intx=0,*p=&x;,则语句printf("%d\n",*p);的输出结果是
A 随机值
B 0
C x的地址
D p的地址
参考答案
B
77有以下程序
main()
{inta[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],*q=p+2;
printf("%d\n",*p+*q);
}
程序运行后的输出结果是
A 16
B 10
C 8
D 6
参考答案
B
78有以下程序
main()
{inta[]={2,4,6,8,10},y=0,x,*p;
p=&a[1];
for(x=1;x<3;x++)y+=p[x];
printf("%d\n",y);
}
程序运行后的输出结果是
A 10
B 11
C 14
D 15
参考答案
C
79以下定义语句中正确的是( )。
A chara='A'b='B';
B floata=b=10.0;
C inta=10,*b=&a;
D float*a,b=&a;
参考答案
C
80有以下程序
main()
{inta=7,b=8,*p,*q,*r;
p=&a;q=