第8章-指针

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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],则以下语句的输出结果是()。

相关文档
最新文档