扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
目录
创新互联长期为上千余家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为盂县企业提供专业的成都网站制作、成都网站设计、外贸营销网站建设,盂县网站改版等技术服务。拥有10余年丰富建站经验和众多成功案例,为您定制开发。一、什么是const
二、使用const的优点
三、const的用法
(1)修饰局部变量
(2)常量指针与指针常量
三、修饰函数的参数
(1)防止修改指针指向的内容
(2)防止修改指针所指向的地址
四、修饰函数的返回值
五、修饰全局变量
六、简单笔试题
如果我们想定义这样一种变量,使它的值不能被改变,在整个作用域中都保持固定,那可以使用const
关键字对变量加以限定。
不过要注意,被const所修饰的变量,其值是可以通过指针被修改的!
有一种说法是const定义的是变量为常变量。
被const修饰的是变量,而修饰之后又相当于常量,但还有变量的属性,所以叫常变量。
其用法非常简单,只需在定义变量时前加const即可。
const既可以加在变量前、类型后,又可以加在类型前。如:
const int i = 0;
int const a = 0;
这两者是等价的。
二、使用const的优点1、预编译指令仅是对值的简单替换,不能对类型进行检查,相比之下,被const修饰的变量有自己的类型;
2、const可以保护被修饰的变量,防止意外修改,增强程序的健壮性;
3、可以避免不必要的内存分配,编译器通常不为被const修饰的变量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,它的效率很高。
4、可以进行类型检查
三、const的用法 (1)修饰局部变量const char* str="fdsafdsa";
如果没有const的修饰,我们可能会在后面有意无意的写str[4]=’x’这样的语句,这样会导致对只读内存区域的赋值,然后程序会立刻异常终止。有了const,这个错误就能在程序被编译的时候就立即检查出来,这就是const的好处。让逻辑错误在编译期被发现。
(2)常量指针与指针常量常量指针是指针指向的内容是常量,可以有以下两种定义方式。
const int* n;
int const* n;
可以发现,无论是在int前还是后,它们均位于*之前。
警告:
1.常量指针只是不能通过指针改变变量的值,还可以以其他方式来改变变量的值。
int a=5;
const int* n=&a;
a=6;
2.指针本身可以被改变!常量指针可以指向其他的地址。
int a=5;
int b=6;
const int* n=&a;
n=&b;
3.指针常量是指指针本身是个常量,不能指向其他地址。
int*const n;
4.指针常量指向的地址不能改变,但是地址中保存的数值是可以改变的,可以通过其他指向该地址的指针来修改。
int a=5;
int*p=&a;
int* const n=&a;
*p=8;
区分常量指针和指针常量的关键就在于*的位置,以*为分界线,如果const在星号的左边,则为常量指针,如果const在星号的右边则为指针常量。
5.指向常量的常指针是以上两种的结合,指针指向的位置不能改变并且也不能通过这个指针改变变量的值,但是依然可以通过其他的普通指针改变变量的值。
const int* const p;
三、修饰函数的参数
(1)防止修改指针指向的内容void StringCopy(char*strDestination, const char*strSource);
其中strSource是输入参数,strDestination是输出参数。给strSource加上const修饰后,如果函数体内的语句试图通过解引用的方式改动strSource的内容,编译器将指出错误。
(2)防止修改指针所指向的地址void swap ( int* const p1 , int* const p2 );
指针p1和指针p2指向的地址都不能修改。
四、修饰函数的返回值如果给以“指针传递”方式的函数返回值加 const 修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加const 修饰的同类型指针。
例如函数
const char* GetString(void);
用法是
const char*str = GetString();
五、修饰全局变量全局变量的作用域是整个文件,我们应该尽量避免使用全局变量,因为一旦有一个函数改变了全局变量的值,它也会影响到其他引用这个变量的函数,导致除了bug后很难发现,如果一定要用全局变量,我们应该尽量的使用const修饰符进行修饰,这样方式不必要的以为修改,使用的方法与局部变量是相同的。
六、简单笔试题有关const的面试题、笔试题太多了,很精彩,可以自行查找。这里仅用2015年360的笔试题讲解。
牛客网链接:语言中哪一种形式声明了一个指向char类型变量的指针p,p的__牛客网 (nowcoder.com)
语言中哪一种形式声明了一个指向char类型变量的指针p,p的值不可修改,但p指向的变量值可修改?
A.const char *p
B.char const *p
C.char*const p
D.const char *const p 【正确答案】C 【解析】const 限定一个数据为只读属性。 1.const char p; 限定变量 p 为只读。 2.const char *p; p 为一个指向 char 类型的指针,const 限定 p 指向的数据为只读。所以 *p 的值不能被修改,而指针变量 p 本身的值可以被修改。 3.char * const p; 限定此指针变量为只读,所以 p 的值不能被修改,而 *p 的值可以被修改。 4.const char *const p; 两者皆限定为只读,不能修改。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流