首页 考试吧论坛 Exam8视线 考试商城 网络课程 模拟考试 考友录 实用文档 求职招聘 论文下载 | ||
2011中考 | 2011高考 | 2012考研 | 考研培训 | 在职研 | 自学考试 | 成人高考 | 法律硕士 | MBA考试 MPA考试 | 中科院 |
||
四六级 | 职称英语 | 商务英语 | 公共英语 | 托福 | 雅思 | 专四专八 | 口译笔译 | 博思 | GRE GMAT 新概念英语 | 成人英语三级 | 申硕英语 | 攻硕英语 | 职称日语 | 日语学习 | 法语 | 德语 | 韩语 |
||
计算机等级考试 | 软件水平考试 | 职称计算机 | 微软认证 | 思科认证 | Oracle认证 | Linux认证 华为认证 | Java认证 |
||
公务员 | 报关员 | 银行从业资格 | 证券从业资格 | 期货从业资格 | 司法考试 | 法律顾问 | 导游资格 报检员 | 教师资格 | 社会工作者 | 外销员 | 国际商务师 | 跟单员 | 单证员 | 物流师 | 价格鉴证师 人力资源 | 管理咨询师考试 | 秘书资格 | 心理咨询师考试 | 出版专业资格 | 广告师职业水平 驾驶员 | 网络编辑 |
||
卫生资格 | 执业医师 | 执业药师 | 执业护士 | ||
会计从业资格考试(会计证) | 经济师 | 会计职称 | 注册会计师 | 审计师 | 注册税务师 注册资产评估师 | 高级会计师 | ACCA | 统计师 | 精算师 | 理财规划师 | 国际内审师 |
||
一级建造师 | 二级建造师 | 造价工程师 | 造价员 | 咨询工程师 | 监理工程师 | 安全工程师 质量工程师 | 物业管理师 | 招标师 | 结构工程师 | 建筑师 | 房地产估价师 | 土地估价师 | 岩土师 设备监理师 | 房地产经纪人 | 投资项目管理师 | 土地登记代理人 | 环境影响评价师 | 环保工程师 城市规划师 | 公路监理师 | 公路造价师 | 安全评价师 | 电气工程师 | 注册测绘师 | 注册计量师 |
||
缤纷校园 | 实用文档 | 英语学习 | 作文大全 | 求职招聘 | 论文下载 | 访谈 | 游戏 |
5.1 单项选择题
1.设有定义“int a=3, b,*p=&a;”,则下列语句中使 b不为3的语句是( )
① b=* &a; ② b=* p;
③ b=a; ④ b=*a;
【解】定义有 int a=3, b,*p=&a;对b赋值的表达式有*&a、*p、a 、*a。引用变量。的值有两种方法,一是直接引用a,二是通过a的指针间接引用a。对于后者,又有多种表达方法,通过指向a的指针p,间接引用a的内容,如*p。或通过求地址运算符由变量a得到其指针&a,再由这指针表达式间接引用 a的内容,如* &a。所以表达式*&a、*p和a都能引用变量a的值,而使b的值为3。而表达式。a是错误的,因为a不是指针变量,不能对它施行取内容运算符。。所以解答是④。
2 .设指针x指向的整型变量值为万,则"printf("%d\n",++ *x);"的输出是( )
① 23 ② 24 ③ 25 ④ 26
【解】若指针变量x指向某个变量,例如指向变量v,并且变量v的值是25,则表达式++ *x的值是26。这是因为表达式的计算顺序可加圆括号表达成(++(*x)),首先是*x,是对X所指变量V的引用,所以++ *X就是++V。++V是先让变量V增1,并以增至后的V的值为表达式++V的结果,所以其值是 26。所以解答是④。
3.若有说明:“ int i,j= 7,*p=&i;”,则与“ i=j;”等价的语句是( )
①i=*p; ②*P=* &j;
③i==&j; ④i=* *p;
【解】指针变量 p指向变量i时,表达式i=*p等价于 i=i;表达式*p=*&j等价于i=j;而表达式i=&j企图将整型变量的指针赋给整型变量,这是错误的;表达式i=* *p也是一种错误的表达式。p是指针,*p是p所指变量j,* *p是企图将整型变量j当作指针,并想通过j间接引用某个变量。所以解答是②。
4.若有说明语句“int a[10],*p=a;”,对数组元素的正确引用是( )
①a[p] ②P[a]
③*(P+2) ④P+2
【解】在 C语言中,约定数组名单独出现在表达式中时,它表示数组首元素的指针。有int a[10] ,则a可以作为&a[0]使用。另有整型指针变量p,代码p=a实现p指向数组a的首元素。则表达式*(p+2)是引用数组元素a[2]。表达式a[p]和p[a]都是不正确的,下标必须是整型表达式,不可以是指针表达式。表达式p+2是指针表达式,它的值是&p[2]。所以只有表达式*(p+2)引用数组a的元素a[2]。所以解答是③。
5.下面各语句中,能正确进行赋字符串操作的语句是( )
①char s[5] ={"ABCDE"}; ②char s[5] ={’A’,’B’,’C’,’D’,’E’};
③ char *s;s="ABCDE"; ④ char *s;scanf("%", s);
【解】字符串最终存储于字符数组中,存储字符串的字符数组可以是程序主动引入的(定义或动态分配),也可以是字符串常量,由系统分配。其中字符数组用字符串初始化就是字符串存储于由程序引入的字符数组的例子。给字符指针赋字符串则是系统自动分配字符率存储空间的例子。给字符指针赋字符串并不是将一个长长的字符串存于字符指针变量中,而是将字符串常量存储于常量区,并将存储这个字符串的首字节地址赋给指针变量,让指针变量指向字符率常量的首字符。对于以字符串作为字符数组初值的情况,要求字符数组足够的大,能存得下字符串常量。这里有一个特别的规定,若数组的大小少于存储字符串有效字符的字节个数,系统将报告错误;当字符数组的大小只能存储字符串的有效字符,而不能存储字符率结束标记符时,则存储于字符数组中的内容是字符序列,因没有存储字符率结束标记符,存储的内容就不是字符串。如代码char a[5]="ABCDE"。另外,给字符数组元素逐一赋字符初值,并在字符初值中没有字符串结束标记符,则存于字符数组中的内容也不是字符率。如代码 char s[5]={’A’,’B’,’C’,’D’,’E’}。特别要注意当字符指针还未指向某个字符数组的元素时,不可以通过字符指针输入字符串。如代码char *s;scanf("%s",s)。若写成char *str;scanf("%s",&str)更是错误的了。由于C语言规定数组不能相互赋值,所以只能将字符串常量赋给某字符指针。如代码char *s;s="ABCDE"是正确的。实际上,字符率"ABCDE" 被存储于常量区中,向指针变量赋的是字符指针,让s指向其中的字符’A’。所以解答是③。
6.若有以下定义,则不能表示a数组元素的表达式是()
int a[10]={1,2,3,4,5,6,7,8,9,1o},*p=a;
①*p ② a[10] ③*a ④ a[p-a]
【解】上述代码定义了有10个元素的整型数组。,和定义指针变量p,并让p指向数组元素a[0]。所以代码*p是引用 a[0]。由于数组a只有10个元素,最后一个元素是a[9],表达式a[10]是错误的。数组名a可以作为a的首元素的指针,表达式*a就是a[0] ,是对数组a的首元素a[0]的引用。指针p的值是a,表达式p-a。的值是0,所以a[p-a]就是a[0]。所以解答是②。
7.若有以下定义,则值为3的表达式是()
int a[]= {1,2,3,4,5,6,7,8,9,10},*p=a;
①p+=2,*(p++) ③p+=2,* ++p
③p+=3,*p++ ④ p+=2,++ *p
【解】数组a有10个元素,分别有值1至10,指针变量p指向a[0] ①逗号表达式 p+=2,*(P++),先是P+=2使P指向a[2],接着是*(P++),以当时P所指变量a[2]取内容3为表达式的值,同时使p指向a[3]。②返号表达式p+=2,* ++p,先是p+=2使p指向a[2],以后是* ++p,又使 p增1,让它指向a[3],并取指针p所指变量a[3]的内容4作为表达
式的值。③逗号表达式 p+=3,*p++,先是p+=3使p指向a[3],以后是*p++,表达式的值是 a[3]为 4,而使p指向a[4]。④逗号表达式p+=2,++ *p,先是p+=2,使p指向a[2],以后是++ *p,因当时的*p就是 a[2],++a[2]使a[2]增1,变成4,并以4为表达式的值。所以只有p+=2,*(p++)的值是3。所以解答是①。
更多软考资料请访问:考试吧软件水平考试栏目
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |