c++和c中const的区别
const在c与c++的区别与使用
大学期间对c和c++的了解太少了,现在工作了导致自己来恶补,简单的const关键字里面的学问还是挺大的,越是基础的知识越是容易忘却,所以今天开始记录着自己每一天的学习结果。
1.在c语言中const
在C语言中 const关键字用来修饰变量名为只读,仅此而已。
也就是说通过变量名不可以修改它的值,但是可以通过得到它的地址来修改他的值。
#include<stdio.h>
int main(){
const int a = 10;
int *p = (int *)&a;
*p = 20;
printf("a = %d\n",a);
return 0;
}
同时被const修饰的全局变量也就是外连接,其他源文件要引用只需要加上extern即可。
被const修饰的全局变量不能以地址的形式进行修改,由于它在内存中位于常量区,他的地址空间是只读的。在C语言中被const的变量是直接被分配内存的。

2.c++中的const
2.1 c++中const的使用
c++中 const关键字被用来表示常量,和#define的作用一样。
在C++中能否通过地址来改变它的值,取决于是否给他分配了内存。主要分以下三中情况
1、const int a = 10;
这种情况是不分配内存的,直接被写在符号表中,即使后面被分配了内存,那么a的值也不会被改变,输出的值一直都是符号表中的值
```
#include<iostream>
int main(){
const int a = 10;
std::cout << "original a =" << a << std::endl;
int *p = (int *)&a;
*p = 200;
std::cout << "*p =" << *p << std::endl;
std::cout << "last a =" << a << std::endl;
return 0;
}
```
测试结果如下图所示:

2、int b =100;
const int a = b;
3、const person per ={"name","id"}
2和3这种情况都是直接分配内存的,并不会被写在符号表中,它的值是可以通过地址访问的方式来改变的。
2.2 c++中const的使用建议
在c++中尽量将宏定义#define 替换为 const
由于#define在编译的预处理阶段就替换为相对应的常量,假如 #define Max 1024; 那么我们在由于这发生错误,他只会提示1024出现错误,
而我们换成const int Max = 1024;系统就会提示我们这一行发生了错误,并且定义到相对应的行。
2.3 常量指针与指针常量的区别
这一题目都是面试中好多公司愿意问的问题,刚好学习到这,就把这块也纳入到本章节中。
指针常量
int *const p;,顾名思义它是一个常量,只不过被指针修饰。
int a = 10, b =20;
int *const p = &a;
p = &b; //×
*p = 30; //√
常量指针
const int *p;p是一个常量
int a = 10, b =20;
int *const p = &a;
p = &b; //√
*p = 30; //×
2.4 练习题
指向常量的指针常量
int * const p; //指针常量
const int * const p;//指向常量的指针常量
c++和c中const的区别的更多相关文章
- C、C++中const的区别
C语言中: 被const修饰的变量,仍然是变量.虽然不能用C语法给这个变量改变值,但他本质上还是变量. C编译器会给它分配空间. C中,const默认使用的是外部链接. C++中: 被const修饰的 ...
- JavaScript中const、var和let区别浅析
在JavaScript中有三种声明变量的方式:var.let.const.下文给大家介绍js中三种定义变量的方式const, var, let的区别. 1.const定义的变量不可以修改,而且必须初始 ...
- 实例讲述PHP面向对象的特性;;;php中const与define的使用区别
php中const与define的使用区别 1.const:类成员变量定义,一旦定义且不能改变其值. define:定义全局常量,在任何地方都可以访问.2.define:不能在类中定义,而const可 ...
- C++ 中 const和define的区别
来源网址:http://wujiangping.blog.163.com/blog/static/195182011201255115125205/ 请区别用#define命令定义的符号常量和用con ...
- js中const,var,let区别(转载)
js中const,var,let区别 来源:https://www.cnblogs.com/zzsdream/p/6372729.html 今天第一次遇到const定义的变量,查阅了相关资料整理了这篇 ...
- C#中 const 和 readonly 的区别
C#中 const 和 readonly 的区别 来源 https://www.cnblogs.com/gsk99/archive/2008/10/10/1308299.html http://dev ...
- C++中define与const的区别
C++中不但可以用define定义常量还可以用const定义常量,它们的区别如下: 用#define MAX 255定义的常量是没有类型的,所给出的是一个立即数,编译器只是把所定义的常量值与所定义的常 ...
- php中const与static的区别与使用(转)
首先关于const 在php的类内部只可以修饰成员属性,不可以修饰方法,如下: class Test{ const PATH = 'c/';//修饰常量 const function te ...
- js中定义变量之②var let const的区别
var 上一篇文章有讲过,是js定义变量的关键词. 但是在es6中,新添加了两个关键词,用于变量声明的关键词:let 和const 接下来就说一下var let 和const的区别: 首先说var 用 ...
随机推荐
- Linux下Zabbix5.0 LTS添加MySQL监控,实现邮件报警并执行预处理操作
依据前文:Linux下Zabbix5.0 LTS监控基础原理及安装部署(图文教程) 环境,继续添加MySQL应用集. 第一部分:添加Zabbix自带的MySQL应用集. 在ZabbixClient-0 ...
- GDI绘制Winform工作流组件、具有独立图层的增删处理、防PPT效果
最近接了个小项目10K.用了2个下班时间写完,共花费了6-7个小时完成.如有同类需求的可以与本人联系,QQ:120772981 功能目标: 需要写一个仿PPT画泳道图的组件.之前写过工作流的组件,其实 ...
- 第十五章---JSON
目录: (一)介绍 (二)Python 编码为 JSON 类型转换对应表 (三)JSON 解码为 Python 类型转换对应表 (四)实例 正文: (一)介绍 JSON (JavaScript Obj ...
- [uoj173]鏖战表达式
2018年论文题,上接loj2506,主要是论文中的第4章,也可快速跳至原题解 5.平衡树的嵌套问题 平衡树嵌套 所谓平衡树嵌套,就是若干棵平衡树,其中若干棵平衡树的根会指向另一颗平衡树上的一个节点 ...
- lambda函数实现链表的小根堆
struct ListNode { int val; ListNode *next; ListNode() : val(0), next(nullptr) {} explicit ListNode(i ...
- ML2021 | (腾讯)PatrickStar:通过基于块的内存管理实现预训练模型的并行训练
前言 目前比较常见的并行训练是数据并行,这是基于模型能够在一个GPU上存储的前提,而当这个前提无法满足时,则需要将模型放在多个GPU上.现有的一些模型并行方案仍存在许多问题,本文提出了一种名为 ...
- SpringCloud微服务实战——搭建企业级开发框架(二十四):集成行为验证码和图片验证码实现登录功能
随着近几年技术的发展,人们对于系统安全性和用户体验的要求越来越高,大多数网站系统都逐渐采用行为验证码来代替图片验证码.GitEgg-Cloud集成了开源行为验证码组件和图片验证码,并在系统中添加可配置 ...
- 【状压dp】Hamiton路径
描述 给定一张 n(n≤20) 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamilton路径. Hamilton路径的定义是从 0 到 n-1 不重不漏地经过每个点 ...
- CF#581 (div2)题解
CF#581 题解 A BowWow and the Timetable 如果不是4幂次方直接看位数除以二向上取整,否则再减一 #include<iostream> #include< ...
- docker_清华源国内的选择
清华大学开源镜像官网:https://mirrors.tuna.tsinghua.edu.cn/ 前期: 在centos7 中的extras 源里面有docker 安装包,但是里面的安装包是比较旧的 ...