|
|
51CTO旗下网站
|
|
移动端

1.9.2 const

《程序员面试笔试真题与解析》本书针对当前各大 IT企业面试笔试中特性与侧重点,精心挑选了 3年以来近百家典型 IT企业的面试笔试真题,这些企业涉及业务包括系统软件、搜索引擎、电子商务、手机 APP、安全关键软件等,面试笔试真题非常具有代表性与参考性。本节为大家介绍const。

作者:猿媛之家来源:机械工业出版社|2017-12-06 17:06

1.9.2 const

【真题 108】关键字 const的作用是什么?

答案:关键字 const修饰的变量表示该常量是不可以修改的。

【真题 109】简述以下各定义的含义:

1)const char *p;

2)char const *p;

3)char * const p;

答案:const char *p; //指向常量的指针,指向的常量值不可以改( const修饰 char)

char const * p;// 和 const char *p一样(const修饰*p)

char * const p; //常量指针,p的值不可以修改 (const修饰 p)

由于没有 const *的运算,如果出现 const *的形式,则 const实际上是修饰前面的。

例如:char const*p,由于没有 const*运算,则 const实际上是修饰前面的 char,因此,char const*p等价于 const char*p,所以,语句 1)和语句 2)中 p表示的意思是一样的,为指向常量的指针,语句3)中 p表示的意思是指针常量。

【真题 110】有以下表达式: int a=248; b=4;int const c=21;const int *d=&a; int *const e=&b;int const *f const =&a;请问下列表达式中,哪些会被编译器禁止?为什么? *c=32;d=&b;*d=43;e=34;e=&a;f=0x321f;

答案:变量 c是 const常量,不是指针,所以,*c是一种非法使用方式,会被编译器禁止。 *d是 const类型,所以, d=&b;*d=43;是非法使用方式,会被编译器禁止。同理, e与 f都是 const类型,所以,也会被编译器禁止。

【真题 111】在 C++语言中, X为一个 C++类,以下语法错误的是()。

A.const X * x B.X const * x C.constX const * x D.X * const x 答案:C。如果 const位于*的左侧,则 const就是用来修饰指针所指向的变量,即指针指向为常量。如果 const位于*的右侧,则 const就是修饰指针本身,即指针本身是常量。选项 A,const修饰的是 X(在*左边),表示的是指针 x指向的对象常量。选项 B,const修饰*x(在*左边),与选项 A是相同的,表示 x指向的对象是常量。选项 C,两个 const表示的同一个意思,因此,这种写法是错误的。如果换成 const X* const x,那

么表示 x这个指针为常量,而且 x指向的对象也是常量。选项 D,const修饰 x(在*的右边),表示 x这个指针为常量,一旦初始化后就不能指向其他的对象了。本题中,选项 A、选项 B和选项 D符合语法规则,只有选项 C不符合语法规则。所以,选项 C错误。

【真题 112】定义有 int * const ptr,下面说法中正确的是()。

A.ptr不可修改, *ptr不可修改 B.ptr不可修改, *ptr可修改

C.ptr可修改, *ptr可修改 D.ptr可修改, *ptr不可修改答案:B。当 const与指针运算符*搭配使用时, *号右边的 const表示指针不能改变其自身的指向,即常指针,

固定指向一个地址,需要在声明的时候初始化。所以,选项 B正确。为了更好地解释,举几个简单的例子加以说明。

  1. int i = 4j = 5; //定义整型变量a 与b  
  2. int* const ptr; //错误,未在声明的时候初始化。  
  3. int* const ptr = &i; //正确,声明的时候初始化  
  4. ptr = &j; //错误,常指针固定指向一个地址,不能更改。  
  5. *ptr = 6; //正确,内容可以改 

在《C++ Primer》(第五版)一书中指出, const int*和 int* const中的 const修饰的对象不同, const int*

修饰值,不能改变指针所指的值;而 int* const修饰指针,不能改变指针的地址。

【真题 113】已知 const char * node="ABC";下列语句合法的是()。

A.node[2] = 'k'; B.*node[2]='k'; C.*node = "xyz"; D.node="xyz";答案:D。本题中,node是一个指针,它指向的内容是 const char 类型。node可以指向任何标示符,但它指向

的内容是不能被改变的,但是选项 A、选项 B与选项 C三项均改变了它指向的内容,所以,选项 A、选项 B与选项 C错误。只有选项 D的写法是正确的。

【真题 114】 print()函数是一个类的常成员函数,它无返回值,下列表示中,正确的是()。

A.const void print(); B.void const print(); C.void print() const; D.void print(const);

答案: C

常成员函数的说明格式如下:

类型说明符函数名(参数表) const;

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

计算机病毒防范艺术

本书由Symantec首席反病毒研究员执笔,是讲述现代病毒威胁、防御技术和分析工具的权威指南。与多数讲述计算机病毒的书籍不同,本书完全是...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊