还剩5页未读,继续阅读
文本内容:
一、单选题
1、若有说明intn=2,*p=n,*q=p;则以下非法的赋值语句是()A.p=q;B.p=n;C.n=*q;D.*q=3;正确答案B解析B、p为指针类型,即“地址箱”,要保存地址,而n为整型数,类型不匹配
2、若有以下定义int x,*pb;则正确的赋值表达式是()A.*pb=*x;B.pb=x;C.pb=x;D.*pb=x;正确答案c解析A、x是整型变量,普通变量前面加*,这是错误的,没有该语法D、运行时错误正确的是pb=x;x的地址应放到“地址箱”即指针变量pb中,一定要注意“地址箱”即指针变量为pb,而非*pb如果写成*pb=x;会出现什么问题呢?pb为随机指向的“野指针”,即随机指向一个空间,该语句试图吧x放入到该随机空间中,报运行时错误
3、若定义int a=511,*b=a;则printf%d\n,*b;的输出结果为A.511B.无确定值C.512D.a的地址正确答案A解析A、b是指针变量,保存a的地址,那么*b就是a
4、下面能正确进行字符串赋值操作的是A.char*s;s=abcde;B.char*s;scanf%s,s;C.chars
[5]QaJb-cJdJe};D.char s
[5]={abcde};正确答案A解析B、编译不报错,运行时错误原因s指针随机指向一个空间,即野指针,不能试图把一个字符串输入到该随机空间中,运行时报错C、语法正确,但数组s中由于缺少字符串结束符‘\0’,故村的不是字符串,而是5个独立的字符D、s数组可容纳5个字符元素,而字符串匕bed别忘了默认一个vr,故共6个字符,存不下,语法保存
5、下列语句错误的是()A.char a
[10]=china;B.char a
[10],*p;p=a=china;C.char*a;a=china;D.char a
[10],*p=a;p=china;正确答案B解析B、p=a=china;为连续赋值语句,由于赋值号=的右结合性,先执行把china赋值给a,这步就有语法错误,因为a是数组名,数组名是常量,不能为其赋值C、开始指针a为随机指向的“野指针”后来指向字符串常量china”,即指向该字符串中的首字符c为正确语法D、p初始指向a
[0],指向完p=china;后p指向字符串常量“china”,不再指向a
[0],为正确语法
6、若已定义char a
[10];则在下面表达式中不表示a[l]地址的是A.a[l]B.a[O]+l C.a+1D.a++正确答案D解析D、后缀加表达式,先取a的值作为表达式的值,为还是a
[0]的地址,与题目不符
7、已知main函数中有声明int a=3z b=5;若在main函数中通过执行函数调用语句swapa,b;实现交换a b值的功能,则下列swap函数的定义中正确的是A.void swapintx,int yint t;t=x;x=y;y=t;}B.void swapfint*x,int*yint*p;*p=*x;*7«*y=*p;}C.void swapint*x,int*yint*p;P=x;x=y;Y=P;D.void swapfint*x,int*yint t;t=*x;*x=*y;*y=t;}正确答案D解析A、首先分析调用语句swap a,b;两个实参分别传递的是地址,那形参自然要是“地址箱”即指针变量来接受该地址应该为void swapfint*x,int*y故该选项不对B、p指针没有合法指向,为“野指针”,不能为该随机空间赋值,即*p=*x;这条编译时并不会报错,但运行时错误C、该选项交换的是X、y两个指针变量中的值即地址,交换前X中保存a地址、y中保存b地址;交换后x中保存b地址,y中保存a地址即该选项swap内部交换的是形参中a和b的地址,对外部a和b的值并没改变
8、以下程序的输出结果是#includestdio.h intmainvoidinta[]={l,2,3,4,5,6,7,8,9},*p=a;P++;printf%d,*p+4;return0;A.6B.8C.7D.5正确答案A解析A、p初始指向a
[0],执行p++后,p指向a[l],即p保存a[l]的地址P+4表示在a[l]+4即p+4—a
[5]*p+4—a
[5],而a
[5]为
69、变量的指针,其含义是该变量的(A.名B.一个标志C值D.地址正确答案D。