六指针_选择题(答案)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

六、指针

183.下程序的运行结果是(A)。

void ast (int x,int y,int *cp,int *dp)

{ *cp=x+y; *dp=x-y;

}

main()

{ int a=4,b=3,c,d;

ast(a,b,&c,&d);

printf("%d,%d\n",c,d);

}

A.7,1

B.1,7

C.7,-1

D.c、d未赋值,编译出错

执行ast(a,b,&c,&d);调用ast 函数,把a传递给x,b传递给y,c 的地址传递给cp,d的地址传递给dp.

因为cp=&c(cp的值为c变量的地址),所以*cp等价于c,

执行*cp=x+y ;后c=4+3=7

同理,因为dp=&d,所以*dp等价于d,

执行*dp=x-y;后d=4-3=1

执行printf("%d,%d\n",c,d);后输出7,1

184.有以下语句:

int a[5]={0,1,2,3,4,5},i;

int *p=a;

设0≤i<5,对a数组元素不正确的引用是(C)。

A.*(&a[i])

B.a[p-a]

C.*(*(a+i))

D.p[i]

1.指针运算符

取地址运算符&:其功能是取变量的地址。

2.取内容运算符*:用来表示指针变量所指的变量。在*运算符之后

跟的变量必须是指针变量。

A . *(&a[i]) 等价于a[i]

B. a[p-a]等价于a[0]

C. 因为*(a+i) 等价于a[i] 所以*(*(a+i))等价于*(a[i]) ,又因为在*运算符之后跟的变量必须是指针变量,我们断定*a[i]是错的,所以*(*(a+i))也是错。

D.因为P=a,所以P[i]等价于a[i]

185.若有定义int *p1,*p2; 则错误的表达式是(A)。

A.p1+p2

B.p1-p2

C.p1

D.p1=p2

两个指针变量可以相减(结果表示介于二者之间元素的个数),可以比较大小,但不能相加。186.以下叙述错误的是(D)。

A.存放地址的变量称为指针变量

B.NULL可以赋值给任何类型的指针变量

C.一个指针变量只能指向类型相同的变量

D.两个相同类型的指针变量可以作加减运算

D两个相同类型的指针变量相加没有意义,所以不可以作加运算,所以D错。

187.以下程序段运行后,表达式*(p+4)的值为(B )。

char a[]="china";

char *p;

p=a;

A.'n'

B.'a'

C.存放'n'的地址

D.存放'a'的地址

a是一维数组名,表示数组首地址,即等价于&a[0]

因为p=a;即p=&a[0],所以*p等价于a[0]

因为p=a;所以p+i等价于a+i, 而a+i是a[i]的地址,*(a+i)等价于a[i]

所以*(p+i)等价于a[i]

*(p+4)=a[4]=’a’

188.以下程序段运行后,表达式*(p++)的值为(A)。

char a[5]="work";

char *p=a;

A.'w'

B.存放'w'的地址

C.'o'

D.存放'o'的地址

printf( "%3d\n", (*p)++ ); /*先输出*p,再进行(*p)++ */

printf( "%3d\n", *p++ ); /*先输出*p,再进行p++ */

printf( "%3d\n", *++p ); /*先进行++p,再输出*p */

printf( "%3d\n", ++*p ); /*先进行++(*p),再输出*p */

*(p++) 的值等于*p ,然后p++

因为p等于a所以*p等于a[0]

189.若有定义:

int *p,k=4; p=&k;

以下均代表地址的是(C)。

A.k, p

B.&k, &p

C.&k, p

D.k, *p

A.k不是地址

B.k,p都是变量所以&k, &p都代表地址(&p是指针变量p的地址),所以B也是正确的C.&k和p都是代表变量k的地址,所以C正确

D.K,*p都等于4,都不是地址

190.若有定义:double *q,p;则能给输入项读入数据的正确程序段是(B)。

A.q=&p;scanf("%lf",*q);

B.q=&p;scanf("%lf",q);

C.*q=&p;scanf("%lf",q);

D.*q=&p;scanf("%lf",*q);

根据课本P37,调用scanf函数的语法格式为:

scanf(格式控制字符串,地址列表);所以

A. *q不是地址,所以A错

B.因为q=&p,即q等于p的地址,所以B正确

C.D. *q=&p错误

191.若已定义: int q=5; 对①int *p=&q;和②p=&q; 这两条语句理解错误的是(C)。

A.①是对p定义时初始化,使p指向q;而②是将q的地址赋给p

B.①和②中的&q含义相同,都表示给指针变量赋值

C.①是对p定义时初始化,使p指向q;而②是将q的值赋给p所指向的变量

D.①和②的执行结果都是把q的地址赋给p

①int *p=&q; 是对p定义时初始化,使p的值等于q的地址

②p=&q;是将q的地址赋值给p.

C中②理解错误。应该是将q的地址赋值给p.

192.下面语句错误的是(A)。

A.int *p; *p=20;

相关文档
最新文档