比较常见的const与指针的组合情况
1.对于普通的const与基本类型组合,都是表示的是这是一个常量,
const int a;
int const a;
表示的意思是一样的,a是一个常量,不可改变
2.对于const与指针组合在一起,可以将const理解为内容,*理解为指针,誰在前面谁不能改变,誰在前面先读谁
const int *a; 等价于int const *a; const在前面所以内容不可以改变,但是指针指向可以改变。也就是常量指针
如:int const *a=b; 这样就不能再出现*a=x等其他值了,因为内容不可变,但是可以通过a=&x;这样来进行改变指针的指向
int *const a; 表示的是指针指向不可改变,但是指针所存放的内容可以改变,也即是指针常量
如:int *const a=b; 这样再出现 a=&x,这样重定义指针指向的语句就不合法,只能通过*a=x这样来进行内容的改变。
const int &ri=i;定义的是引用是另一变量的别名,它本身就是一个常量,也就是说不能再让一个引用成为另一个变量的别名。 我们不能通过ri去改变它所代表的内存区域
3.const修饰函数传入参数
将函数传参数修饰为const,以指明使用这种参数仅仅是为了效率的原因,而不是想让调用函数能够修改对象的值,同理,将指针声明成const,函数将不修改由这个参数所指向的对象。 如:void Fun(const int *a); void Fun(const int &a)
4.修饰函数返回值
可以阻止用户修改返回值,返回值当然也要相应的赋给常量或者常指针。
例如:有时候需要返回的是指针或者引用,我们可以通过指针修改所指的对象,但是有时候不希望改变这个内容,这个时候就需要返回一个常量。
5.const修饰成员函数(c++特性)
const对象只能访问const成员函数,而非const对象可以访问任意成员函数,包括const成员函数
const对象的成员是不能被修改的,而通过指针维护的对象确实是可以修改的
const成员函数不可以修改对象的数据,不管对象是否具有const性质。编译时以是否修改成员函数为依据进行检查。
解释:
const成员函数:函数名称后面加上const。
当一个类中存在同名,同参的常量和非常量成员函数时,调用的时候,常量对象调用常量成员函数,非常量对象调用非常量成员函数。
比较常见的const与指针的组合情况的更多相关文章
- c,const和指针组合的几种意义
const和指针的组合: 注释部分表示非法. ; ; p=&a; //*p = 1 ; ; pp= &a; //*pp = 1; ; //pv=&a; *pv = ; ; // ...
- c++中的const与指针
const修饰符 使用const修饰变量时,该变量的值不可修改,因此需要初始化. 例如 const int s = 0: 此时s为值不可变的变量. 那么基于此,当const修饰指针时的情况有三种: ( ...
- C++中的const和指针组合
在C++里,const修饰指针有以下三种情况 (1)指针常量:即指向常量的指针 const int *p或者int const *p const在*前,,可以这样理解它的功能,因为const在*前, ...
- C语言--const修饰指针解析
这种例子在我们平时编程时可能会很少用,但是在面试时被问的可能性就很大了. 用const修饰指针,常见的情况可以分为四种: 1.const int *p; // p 可变,p 指向的对象不可 ...
- 结合示例说明C++中const和指针结合时怎么理解
在之前随笔<C++中const使用要点(一)>中简单叙述了const int*.int* const和const int* const的区别,记住三句话就能在实际运用时用对,但是看书时发现 ...
- 【原创】浅谈指针(五)const和指针
前言 过了几个月再次更新.最近时间也不多了,快要期中考试了,暂且先少写一点吧. 本文仅在博客园发布,如在其他平台发现均为盗取,请自觉支持正版. 练习题 我们先来看几道题目.如果这几道题都不会的话,就先 ...
- 面试集锦-常量,const, const 对指针的影响
在C语言中不可改变的数据(量)就是常量 在C语言中有三种常量 字面量(直接量),就是直接写出来的,从写法上就可以看出值与类型等,例如:19,123.456等 名字常量 ...
- C语言 const与指针
//const与指针 #include<stdio.h> #include<stdlib.h> void main(){ ; ; const int *p; p = & ...
- 弄清const与指针、引用之间的关系
const和 define在常量定义上的差别 在C++中,我们可以使用const 或者 宏define来定义常量.但是C++鼓励使用const定义常量,而不是宏define.原因有很多. 1.defi ...
随机推荐
- mysql 关键字bug
今天运行语句 select * from order; 出现bug: ERROR 1064 (42000): You have an error in your SQL syntax; check t ...
- Spyder调试错误-"TypeError: decoding Unicode is not supported"
这是Spyder 2.7.4版本的一个Bug,升级到最新版本(2.7.9)即可. pip install --upgrade spyder Reference: https://github.com/ ...
- django框架介绍
主要内容 1. Django框架发展 2. Django架构,MTV模式 3. 开发流程 4. 开发实例——Poll python下各种框架 一 ...
- robot自动化测试(二)--- template使用
首先贴一下测试结构 测试流程: 1.打开百度主页 2.搜索框输入搜索内容 3.获取浏览器title 4.验证title的正确性 百度搜索业务关键字:采用分层结构:只需输入要搜索的内容:${search ...
- ni
坚强歌词 马天宇 - 坚强 天使的翅膀挥动着的光芒一路走来学会了坚强每一次你努力认真的模样让我很欣赏 雨天的路上会有一缕阳光温暖被淋湿的希望再小的河也能汇成海洋让我去远航 一路上陪伴我的目光是最感动的 ...
- GetCurrentDirectory、SetCurrentDirectory和GetModuleFileName
DWORD GetCurrentDirectory( DWORD nBufferLength, // size of directory buffer LPTSTR lpBuffer // ...
- UESTC_Islands 2015 UESTC Training for Data Structures<Problem J>
J - Islands Time Limit: 30000/10000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Su ...
- ZOJ3516 (图的遍历)
Tree of Three Time Limit: 2 Seconds Memory Limit: 65536 KB Now we have a tree and some queries ...
- hdu 1502 Regular Words_高精度+dp
题意:问按规则排成的串有多少个A(c)>= B(c) >= C(c) 思路:因为写大整数太累,就偷懒了一下直接用java水过 import java.math.BigInteger; im ...
- 多线程:pthread_exit,pthread_join,pthread_self
/*exit_join_id.c*/ #include<pthread.h> #include<stdio.h> void* eji(void* agr) { printf(& ...