第8章-指针
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第八章
一、选择题。
8.1若有定义:int x,*pb;则正确的赋值表达式是()。
A) pb=&x B)pb=x C)*pb=&x D)*pb=*x
8.2 若有以下程序:
#include
main()
{ printf(“%d\n”,NUUL); }
程序的输出结果是()。
A)因变量无定义输出不定值B)0 C)-1 D)1
8.3若有以下程序:
#include
void sub(int x,int y,int *z)
{ *z = y-x;}
main()
{ int a,b,c;
sub(10,5,&a); sub(7,a,&b); sub(a,b,&c)
printf(“%d,%d,%d\n”,a,b,c);
}
程序的输出结果是()。
A)5,2,3 B)-5,-12,-7 C)-5,-12,-17 D)5,-2,-7
8.4若有以下程序:
#include
main()
{ int k=2,m=4,n=6,*pk=&k,*pm=&m,*p;
*(p=&n) =*pk*(*pm); printf(“%d\n”,n);
}
程序的输出结果是()。
A)4 B) 6 C) 8 D) 10
8.5若指针p已正确定义并指向如图8.8所示储存单元:
a[0] a[1] a[2] a[3] a[4]
p↑
图8.8 指针p指向示意图
则执行语句*p++;后,*p的值是()。
A)20 B)30 C)21 D)31
8.6若指针p已正确定义并指向如图8.8所示存储单元,则表达式*++p的值是()。
A)20 B)30 C)21 D)31
8.7若指针p已正确定义并指向如图8.8所示存储单元,则表达式++*p的值是()。
A)20 B)30 C)21 D)31
8.8若有以下程序:
#include
void prtv(int *x)
{ printf(“%d\n”,++*x); }
main()
{ int a = 25; printf(&a);}
程序输出的结果是()。
A)23 B)24 C)25 D)26
8.9若有以下程序:
#include
main()
{ int * *k,*a,b=100;
a=&b; k=&a; printf(“%d\n”,* *k); }
程序的输出结果是()。
A)运行出错B)100 C) a的地址D)b的地址
8.10若有以下程序:
#include
void fun( float *a,float *b )
{ float w;
*a = *a + *a; w = *a; *a = *b; *b = w; }
main()
{ float x = 2.0,y = 3.0,*px = &x, *py = &y;
fun( px,py ); printf(“%2.0f,%2.0f\n”,x,y); }
程序的输出结果是()。
A)4.3 B)2,3 C)3,4 D)3,2
8.11若有以下程序:
#include
void sub( double x,double *y,double *z )
{ *y = *y -1.0;*z = *z +x; }
main()
{ double a=2.5,b=9.0, *pa, *pb;
pa = &a; pb =&b;
sub( b-a, pa, pa ); printf(“%f\n”,a); }
程序的输出结果是()。
A)9.000000 B)1.500000 C)8.000000 D)10.500000
8.12以下四个程序中不能对两个整型值进行交换的是()。
A)#include
void swap( int *p, int *q)
{ int *t,a;
t = &a; *t = *p; *p = *q; *q = *t; }
main()
{ int a = 10,b = 20;
swap( &a, &b ); printf(“%d%d\n”, a, b ); }
B) #include
void swap( int *p, int *q)
{ int t;
t = *p; *p = *q; *q = t; }
main()
{ int a = 10,b = 20;
swap( &a, &b ); printf(“%d%d\n”, a, b ); }
C) #include
void swap( int *p, int *q)
{ int t;
t = *p; *p = *q; *q = t; }
main()
{ int *a, *b; *a =10; *b =20;
swap( a, b ); printf(“%d%d\n”, *a, *b ); }
D) #include
void swap( int *p, int *q)
{ int *t,a;
t = *p; *p = *q; *q = *t; }
main()
{ int a = 10,b = 20; *x =&a; *y =&b;
swap( x, y ); printf(“%d%d\n”, a, b ); }
二、填空题。
8.13以下程序段的输出结果是()。
int *var, b;
b =100; var = &b; b = *var +10;
printf(“%d\n”, *var);
8.14以下程序的输出结果是()。
#include
int ast( int x, int y, int *cp, int *dp)
{ *cp = x+y; *dp = x-y; }
main()
{ int c, d;
ast(4,3, &c, &d); printf(“%d%d\n”, c ,d ); }
8.15若有定义:char ch;
(1)使指针p可以指向字符型变量的定义语句是();
(2)使指针p指向变量ch的赋值语句是();
(3)通过指针p给变量ch读入字符的scanf函数调用语句是();
(4)通过指针p给变量ch赋字符A的语句是();
(5)通过指针p输出ch中字符的语句是();
8.16若有如图8.8所示五个连续的int类型的存储单元并赋值如图,且已定义:int
*p,*s;其中p指向存储单元a[1]。
(1)通过指针p,给s赋值,使其指向最后一个存储单元a[4]的语句是();
(2)s指向存储单元a[4],移动指针s,使之指向中间的存储单元a[2]的表达式是();
(3)已知k=2,指针s已指向存储单元a[2],表达式*(s+k)的值是();
(4)指针s已指向存储单元a[2],不移动指针s,通过s引用存储单元a[3]的表达式是();
(5)指针s指向存储单元a[0],则以下语句的输出结果是()。