第1题
以下叙述中错误的是( )。
当在程序的开头包含头文件stdio.h时,可以给指针变量赋NULL
函数可以返回地址值
改变函数形参的值,不会改变对应实参的值
可以给指针变量赋一个整数作为地址值
第2题
以下关于指针的叙述正确是( )。
所有类型的指针变量所占内存的大小是一样的
指针变量所占内存的大小与其类型有关,char型指针变量只占1个 字节,double型指针变量占8个字节
指针变量可直接指向任何类型的变量,而不会出现编译或运行错 误
指针变量既可以直接指向结构体,也可直接指向结构体中某个成 员,而不会出现编译或运行错误
第3题
关于地址和指针,以下说法正确的是( )。
通过强制类型转换可以将一种类型的指针变量赋值给另一种类型 的指针变量
可以取一个常数的地址赋值给同类型的指针变量
可以取一个表达式的地址赋值给同类型的指针变量
可以取一个指针变量的地址赋值给基类型相同的指针变量
第4题
以下关于指针的叙述,错误的是( )。
两个基类型相同的指针变量不能指向同一个对象
可以通过对指针变量自增、自减来移动指针
只有两个类型相同的指针才能进行减运算
一个指针变量可以通过不同的方式获得一个确定的地址值
第5题
基类型不同的指针可以直接相互赋值
函数可以通过指针形参向所指单元传回数据
字符型指针可以指向一个字符串
一般情况下,指针的运用可使程序代码效率更高
第6题
有以下程序:
#include<stdio.h>
main()
{
char
* p1 = 0;
int
* p2 = 0;
float
* p3 = 0;
printf
(
"%d,%d,%d\n"
,
sizeof
(p1),
(p2),
(p3));
}
程序运行后的输出结果是( )。
1,4,8
4,4,4
1,2,4
1,1,4
第7题
若有定义语句:
double
a,*p=&a;
定义语句中的p只能存放double类型变量的地址
定义语句中的*号是一个说明符
定义语句中的*号是一个间址运算符
定义语句中*p=&a把变量a的地址作为初值赋给指针变量p
第8题
设有定义:
a,b[10],*c=NULL,*p;
则以下语句错误的是( )。
p=a;
p=b;
p=c;
p=&b[0];
第9题
已定义以下函数
fun(
*p) {
return
*p; }
fun函数返回值是( )。
一个整数
不确定的值
形参p中存放的值
形参p的地址值
第10题
x=0,*p;
紧接着的赋值语句正确的是( )。
*p=x;
*p=NULL;
p=x;
p=NULL;
第11题
设已有定义:
x;
则以下对指针变量p进行定义且赋初值的语句中正确的是( )。
float *p=&x;
int*p=(float)x;
float p=&x;
float *p=1024;
第12题
设变量p是指针变量,语句p=NULL;是给指针变量赋NULL值,它等价于( )。
p=" ";
p='0';
p=0;
p='';
第13题
以下程序中关于指针输入格式正确的是( )。
int *p;scanf("%d",&p);
int * p;scanf("%d",p);
int k,* p=&k;scanf("%d",p);
int k,*p;*p=&k;scanf("%d",&p);
第14题
x,y,*px,*py;
执行了px=&x;py=&y;之后,正确 的输入语句是( )。
scanf("%1f%1f",px,py);
scanf("%f%f"&x,&y);
scanf("%f%f",x,y);
scanf("%1f%1f",x,y);
第15题
有以下程序
#include <stdio.h>
n,*p=NULL;
*p=&n;
"Input n:"
);
scanf
"%d"
,&p);
"output n:"
"%d\n"
,p);
该程序试图通过指针p为变量n读入数据并输出,但程序有多处错误, 以下语句正确的是( )。
int n,*p=NULL;
scanf("%d",&p);
printf("%d\n",p);
第16题
*p,x=100;
p=&x;
x=*p+10;
,x);
110
120
100
90
第17题
a=1,b=3,c=5;
*p1=&a,*p2=&b,*p=&c;
*p=*p1*(*p2);
,c);
执行后的输出结果是( )。
4
2
1
3
第18题
以下叙述中正确的是( )。
在对指针进行加、减算术运算时,数字1表示1个存储单元的长度
如果p是指针变量,则*p表示变量p的地址值
如果p是指针变量,则&p是不合法的表达式
如果p是指针变量,则*p+1和*(p+1)的效果是一样的
第19题
函数的形参类型不能是指针类型
函数的类型不能是指针类型
设有指针变量为double *p,则p+1将指针p移动8个字节
基类型不同的指针变量可以相互混用
第20题
year=2009,*p=&year;,
以下不能使用变量year 中的值增至2010的语句是( )。
*p+=1
(*p)++;
++(*p);
*p++;
第21题
a[10]={1,3,5,7,11,13,17},*p=a;
"%d,"
,*(p++));
,*(++p));
3,7
3,5
1,5
1,3
第22题
有如下程序:
a=0,*ptr;
ptr=&a;
*ptr=3;
a=(*ptr)++;
"%d,%d\n"
,a,*ptr);
4,4
0,1
1,4
0,4
第23题
m=1,n=2,*p=&m,*q=&n,*r;
r=p;p=q;q=r;
"%d,%d,%d,%d\n"
,m,n,*p,*q);
1,2,1,2
1,2,2,1
2,1,2,1
2,1,1,2
第24题
c[6]={10,20,30,40,50,60},*p,*s; p=c;
s=&c[5];
,s-p);
5
50
6
60
第25题
main ()
a[5] = {2,4,6,8,10},*p,**k;
p = a;
k = &p;
,**k);
24
44
22
46
第26题
以下程序的功能是:通过调用calc函数,把所求得的两数之和值 放入变量add中,并在主函数中输出。
void
calc(
x,
y,
*sum)
{ ______ = x+y; }
x,y,add;
"%f%f"
,&x,&y);
calc(x,y,&add);
"x+y=%f\n"
,add);
calc函数中下划线处应填入的是( )。
*sum
sum
&sum
add
第27题
change(
*data)
(*data)++;
data=123;
change(&data);
,data);
data = change(&data);
"\n"
124,124,
123,124,
124,123,
123,123,
第28题
convert(
data=56;
convert(&data);
data = convert(&data);
56,57,
57,58,
57,57,
55,57,
第29题
k=5;
f(
*s)
s=&k; *s=7;
main() {
m=3;
f(&m);
, m,k); }
7,7
5,7
第30题
k = 5;
*s) {
s = &k; }
m=3, *p=&m; f(p);
,m,*p); }
程序的运行结果是( )。
3,3
5,5
5,3
第31题
以下选项中,不能对主函数中变量i和j的值进行交换的程序是 ( )。
#include <stdio.h> void swap(int *p, int *q) { int *t; *t = *p; *p = *q; *q = *t; } main() { int i=10, j=20,*a=&i,*b=&j; swap(a,b); printf("i=%d j=%d\n",i,j); }
#include <stdio.h> void swap(int *p, int *q) { int t; t = *p; *p = *q; *q = t; } main() { int i=10,j=20,*a=&i,*b=&j; swap(a,b); printf("i=%d j=%d\n",i,j); }
#include <stdio.h> #include <stdlib.h> void swap(int *p, int *q) { int *t; t = (int *)malloc(sizeof(int)); *t = *p; *p = *q; *q = *t; free(t); } main() { int i=10,j=20; swap(&i,&j); printf("i=%d j=%d\n",i,j); }
#include <stdio.h> void swap( int *p, int *q) { int t; t = *p; *p = *q; *q = t; } main() { int i=10,j=20,*x=&i,*y=&j; swap(x,y); printf("i=%d j=%d\n",i,j); }
第32题
*a,
*b)
*c; c=a; a=b; b=c; }
x=3,y=5,*p=&x,*q=&y;
fun(p,q);
"%d,%d"
,*p,*q);
fun(&x,&y);
3,5,5,3
3,5,3,5
5,3,3,5
5,3,5,3
第33题
*f(
*s,
*t)
if
(*s < *t)*s=*t;
s; }
i=3,j=5,*p=&i,*q=&j,*r;
r=f(p,q);
"%d,%d,%d,%d,%d\n"
,i,j,*p,*q,*r); }
5,5,5,5,5
3,5,5,5,5
5,3,3,3,5
3,5,3,5,5
第34题
*p,
*q);
m=1,n=2,*r=&m; f(r,&n);
,m,n); }
*q)
{ p=p+1;
*q=*q+1; }
2,3
1,2
第35题
若有以下程序
sp(
*a) {
b=2;
a=&b;
*a=*a*2;
,*a); }
k=3,*p=&k;
sp(p);
,k,*p);
则程序的输出结果是( )。
4,3,4
4,3,3
6,3,6
6,6,6
第36题
*c,
*d)
*c=x+y; *d=x-y;
a=4,b=3,c=0,d=0;
fun(a,b,&c,&d);
"%d %d\n"
,c,d);
程序的输出结果是( )。
7 1
4 3
3 4
0 0
第37题
t; t = *p;
*p = *q;
*q = t;
*q = *p;
a = 0,b = 9;
fun(&a,&b);
,a,b);
0 9
9 0
9 9
第38题
fun1(
*q;
q=p;
while
(*q!=
'\0'
)
(*q)++;
q++; } }
a[]={
"Program"
},*p;
p=&a[3];
fun1(p);
"%s\n"
,a);
程序执行后的输出结果是( )。
Prohsbn
Prphsbn
Progsbn
Program
第39题
*b) {
(*a==
'*'
a++;
(*b=*a)
b++; a++; } }
*s=
"*****a*b****"
, t[80];
fun(s,t);
puts
(t);
*****a*b
a*b
a*b****
ab
第40题
d) {
*c=*c+1;
d=d+1;
"%c,%c,"
,*c,d); }
b=
'a'
,a=
'A'
;
fun(&b,a);
"%c,%c\n"
,b,a); }
程序运行后的输出结果是 ()。
b,B,b,A
b,B,B,A
a,B,B,a
a,B,a,B
第41题
*t,
(*t!=0)
t++;
((*t++=*s++)!=0); }
ss[10]=
"acc"
,aa[10]=
"bbxxyy"
fun(ss,aa);
"%s,%s\n"
,ss,aa); }
accbbxxyy,bbxxyy
acc,bbxxyy
accxxyy,bbxxyy
accxyy,bbxxyy
第42题
swap(
*x,
*y) {
t;
t=*x;
*x=*y;
*y=t; }
*s1,*s2;
a[]=
"abc"
b[]=
"123"
s1=a; s2=b;
swap(s1,s2);
,s1,s2); }
1bc,a23
abc,123
123,abc
321,cba
选择题(1 - 42题,共计100分)