比较常见的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 ...
随机推荐
- Redis 入门之编译安装
Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工作由VMware主 ...
- cobbler之详细配置
目录 作用 组件 命令 安装过程 安装包 配置文件 启动cobbler服务 配置cobbler服务 使用cobbler_web 作用:系统自动化安装,支持lin ...
- C语言编译过程简介
刚开始接触编程的时候,只知道照书敲敲代码,一直都不知道为什么在windows平台下代码经过鼠标那样点击几下,程序的结果就会在那个黑色的屏幕上.现在找了个机会将C语言的编译原理做一下小小的总结,这样也能 ...
- 常用两种数据交换格式之XML和JSON的比较
目前,在web开发领域,主要的数据交换格式有XML和JSON,对于XML相信每一个web developer都不会感到陌生: 相比之下,JSON可能对于一些新步入开发领域的新手会感到有些陌生,也可能你 ...
- NOI十连测 第六测 T3
思路:考试的时候我非常地**,写了圆并,然后还TM写了半平面交和三角剖分,虽然只有30分..但是看在我写了500行的份上还是挂着吧.. #include<cstdio> #include& ...
- codecomb 2085【肥得更高】
题目背景 自2009年以来,A.B站的历史就已经步入了农业变革的黎明期. 在两站的娱乐及音乐区,金坷垃制造业早已得到长足的发展,甚至有些地方还出现了坷垃翻唱的萌芽. 新兴肥料人开始走上历史的舞台. 他 ...
- GNU C - 关于8086的内存访问机制以及内存对齐(memory alignment)
一.为什么需要内存对齐? 无论做什么事情,我都习惯性的问自己:为什么我要去做这件事情? 是啊,这可能也是个大家都会去想的问题, 因为我们都不能稀里糊涂的或者.那为什么需要内存对齐呢?这要从cpu的内存 ...
- hdu 1502 Regular Words_高精度+dp
题意:问按规则排成的串有多少个A(c)>= B(c) >= C(c) 思路:因为写大整数太累,就偷懒了一下直接用java水过 import java.math.BigInteger; im ...
- 关于uitableView的Group模式滑动偏移问题
问题: uitableView的group模式自带一个section的headerView,如果不调整,系统就会默认高度,在滑动时就会向下偏移一个单位的scetion高度,我们改变tableView的 ...
- zTree实现清空选中的第一个节点的子节点
zTree实现清空选中的第一个节点的子节点 1.实现源代码 <!DOCTYPE html> <html> <head> <title>zTree实现基本 ...