目录

1.C语言中const的用法

1.修饰局部变量

2.修饰全局变量

3.常量指针与指针常量

4.修饰函数的参数

5.修饰函数的返回值

2.C++中const的用法

1.const修饰成员变量

2.const修饰成员函数


1.C语言中const的用法

1.修饰局部变量

const int n=10;
int const n=10;

这两种写法是一样的,都表明变量n的值不能被改变了。

注意:用const修饰变量时,一定要给变量初始化,否则之后不能再给变量赋值。

接下来看看const修饰常量静态字符串,例:

const char* str="abcdefg";

如果没有const的修饰,我们可能会写出str[2]='a'这样的代码,这样会对该只读内存的常量字符串的内容进行修改,程序会异常终止。用const修饰后,这个错误就能在程序被编译的时候就立即检查出来。

2.修饰全局变量

全局变量的作用域是整个文件,我们应该尽量避免使用全局变量,因为一旦有一个函数改变了全局变量的值,它也会影响到其他引用这个变量的函数,导致除了bug后很难发现,如果一定要用全局变量,我们应该尽量的使用const修饰符进行修饰,这样防止不必要的人为修改,使用的方法与局部变量是相同的。

3.常量指针与指针常量

常量指针:指针所指向的内容是常量。

有以下两种定义方式。

const int* n;
int const *n

注意:

1.常量指针说的是不能通过这个指针改变变量的值,但还是可以通过其他的方式来改变变量的值的

int a=10;
const int* p=&a;
a=20;//可以改变a的值
*p=20;//会报错

2.常量指针指向的值不能改变,但是这并不是意味着指针本身不能改变,常量指针可以指向其他的地址。

int a=10;
int b=20;
const int* p=&a;
p=&b;

指针常量:指针本身是个常量,不能再指向其他的地址。写法如下:

int *const p;

注意:指针常量指向的地址不能改变,但是地址中保存的数值是可以改变的,可以通过其他指向改地址的指针来修改。

int a=10;
int *q=&a;
int* const p=&a;
*q=20;//a的值可以改变

常量指针与指针常量的区分:

关键就在于*的位置,我们以*为分界线,如果const在*的左边,则为常量指针,如果const在*的右边则为指针常量。如果我们将*读作‘指针’,将const读作‘常量’的话,内容正好符合。int const * n;是常量指针,int *const n;是指针常量。

指向常量的常指针:是以上两种的结合,指针指向的位置不能改变并且也不能通过这个指针改变变量的值,但是依然可以通过其他的普通指针改变变量的值。

const int* const p;

4.修饰函数的参数

1.防止修改指针指向的内容

void StringCopy(char *strDestination, const char *strSource);

给 strSource 加上 const 修饰后,如果函数体内的语句试图改动 strSource 的内容,编译器将报错。

2.防止修改指针指向的地址

void Swap(int* const p1,int* const p2);

指针p1和p2的指向的地址都不能修改。

3.以上两种的结合

5.修饰函数的返回值

如果给以“指针传递”方式的函数返回值加 const 修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加const 修饰的同类型指针。

例如函数

//例如函数:
const char *GetString();char *str=GetString();//编译错误const char *str=GetString();//正确写法

2.C++中const的用法

C++中const包含了C语言中const的用法,这里只讲C++中const新增加的用法

1.const修饰成员变量

class A
{
public:A(int a):_a(a){}
private:const int _a;
};

只能通过构造函数初始化列表进行初始化;不同类对其const数据成员的值可以不同,所以不能在类中声明时初始化

2.const修饰成员函数

将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。

const关键字的用法相关推荐

  1. C语言中定义常量的关键字是什么,C++_详解C语言中const关键字的用法,关键字const用来定义常量,如 - phpStudy...

    详解C语言中const关键字的用法 关键字const用来定义常量,如果一个变量被const修饰,那么它的值就不能再被改变,我想一定有人有这样的疑问,C语言中不是有#define吗,干嘛还要用const ...

  2. C/C++中const关键字的用法及其与宏常量的比较

    1.const关键字的性质 简单来说:const关键字修饰的变量具有常属性. 即它所修饰的变量不能被修改. 2.修饰局部变量 1 const int a = 10; 2 int const b = 2 ...

  3. C语言中const关键字的用法

    转载请注明出处http://blog.csdn.net/xingjiarong/article/details/47282255 关键字const用来定义常量,如果一个变量被const修饰,那么它的值 ...

  4. static 和 const 关键字的用法总结

    static的作用: 对变量: 1.局部变量: 在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量. 1)内存中的位置:静态存储区 2)初始化:未经初始化的全局静态变量会被程序 ...

  5. C++中const关键字用法详解及实例和源码下载(一)

    最近在学习C++基础部分,看了两天书,已经看过了一遍,半知半解,回过头来重新看第二遍,深入了解一下C++的基础知识.现在读到了const关键字的用法,书上面讲解的时候并没有给出完整的实例,只是理论的讲 ...

  6. C++中的const关键字(zz)

    [补充]mutable关键字 有时我们希望类的数据成员即使在const成员函数中,依然是可以修改的,这时就可以把它们声明为mutable来实现.这样的应用,比如记录各种操作的调用次数,这时,即使在co ...

  7. const 关键字详解

    const 关键字详解 一.const关键字简介 二.const的用法 1.修饰局部变量.全局变量以及字符串常量 2.修饰指针 3.修饰函数的参数 4.修饰函数的返回值 5.const成员函数(C++ ...

  8. 【C 语言】const 关键字用法 ( 常量指针 - const 在 * 左边 - 修饰数据类型 - 内存不变 | 指针常量 - const 在 * 右边 - 修饰变量 - 指针不变 )

    文章目录 一.const 普通用法 二.常量指针 ( 指向 常量 的指针 | 被指向的内存不能被修改 ) 三.指针常量 ( 指针不能被修改 ) 三.指向 常量 的 指针常量 四.const 在 * 左 ...

  9. const关键字及其作用(用法),C语言const详解

    const 在实际编程中用得并不多,const 是 constant 的缩写,意思是"恒定不变的"!它是定义只读变量的关键字,或者说 const 是定义常变量的关键字. 1.con ...

最新文章

  1. JAVA byte[] String
  2. require.js基本认识
  3. 链表中环的入口结点 python_链表中环的入口结点
  4. java扫雷教程_java实现简单扫雷游戏
  5. 利用for循环打印出不同的三角形
  6. L2-015. 互评成绩-PAT团体程序设计天梯赛GPLT
  7. RDMA的原理、传输与Verbs
  8. 【渗透测试】利用永恒之蓝漏洞实现桌面监控
  9. 关于电感数字传感器的一些问题
  10. 重磅发布|主机安全联动蜜罐解决方案助力大型攻防演练
  11. mysql在线检测文件是否损坏,mysql数据文件损坏后的修复方法
  12. 自棱镜事件,隐私保护搜索引擎DuckDuckGo流量增长600%
  13. 关于javaBean运行后出现Name was not previously introduced as per JSP.5.3的解决方法
  14. Seq2Seq and NMT(基于cs224n的最全综述神经机器翻译技术)
  15. 在HTML中 怎么一张图片上在放一张图片,css sprites把很多小图集成在一张图片上...
  16. xshell和xftp免费使用方法
  17. 微信小程序直播,腾讯云直播+微信小程序实现实时直播
  18. jenkins自动打包并向Harbor推送镜像
  19. 图片加载 二维码 解析
  20. 自然语言成了编程语言,不会写 Prompt 的程序员会面临失业吗?

热门文章

  1. 视频编解码——熵编码的概念
  2. 关于计算机的英语作文1000词,英语作文一封信1000词5篇
  3. css修改input样式
  4. 基于支持向量机SVM的脑部肿瘤识别,脑电波样本熵提取
  5. LCS算法(Longest Common Sequence)
  6. 2022年唯品会年货内购清单 人工精选低价
  7. [书籍分享]0-010.教训:互联网创业必须避免的八大误区
  8. 科技感粒子发光HTML5js特效
  9. 软件需求工程 高校教学平台 软件需求规格说明书 part 3 (重点!!!)
  10. 一种AT命令通信解析模块