const的全面理解
const关键字用来作甚?const是一个类型修饰符。常见的类型修饰符有哪些?
short long unsigned signed static autoextern register
定义一个变量。
(1)类型描述符中如果有多个关键字,他们出现的位置不影响对变量的限制。
short int i;
int short i;
const int a;
int const a;//上面两个是一样的。
(2)
const int *a;
int* const a;
int const* const a;
对指针类型变量的理解。
(a)[] () *在数据定义时与在表达式中优先级一样,例如:
int*a[10];//因为[]的优先级高于*。因此是一个数据,每个成员类型为指针,指向int
int (*a)[10]//因为()优先级高于[],因此,先看里面是一个指针,指向类型为数组
指针的判断是从右至左,
(b)
const int *a;//a是变量名,*表示他是一个指针,指向的类型已经确定,
//他是指向一个const int的类型,并且数据不可修改。
int *const a; //*const 一起来修饰a,即a只读,*表示a是一个指针,
//因此,这是一个只读的指针,指向的类型为int型的变量。数据可以修改
int const* const a;//*表示指针,因此指针不可修改,int const是指针指向的类型,仍然是const。
//因此,都不可以修改
栗子:自己验证
#include<stdio.h>
int main()
{
char static data_var='c';
char const data_const='b';
char *const p1=&data_var;
//p1=&data_var;
const char *p2=&data_const;
//*p2='f';
return 0;
}
(3)
typedef void* VP;
const void *ptr//存储位置;
const VP ptr //存储位置;
首先要理解typedef 是定义一种数据类型。一定要与define区分开来。
typedef void* VP;//VP是类型的名字,余下的是这个类型的真实类型
const VP ptr;是不是替换为const void *ptr;?void*是以这个整体。
const int i;==int const i;
VP const ptr;即 void* const ptr;
const 作用:
向其他程序员传递一个信息。这个不要修改。
有可能让编译器产生更精简紧凑代码,减少bug
合理的保护我们只读的数据,避免不必要的错误
使用位置:
定义常量。防止被修改
函数的参数中,如果不希望子函数去修改被调用函数的某个数据,加以限制
在C++中,类的成员函数的使用。
const的全面理解的更多相关文章
- 对 const char* const &a 的理解
定义中用到&是独立引用. 比如: char i; char &a=i; 表示a是i的一个单独引用. 当有i='a'时,也有a='a'; 当有a='c'时,也有i='c'; 两个变量的标 ...
- const char * 组合理解
1 . const char *ptr 从char *ptr 可以理解为指向字符常量的指针,ptr是一个指向char *的常量,*ptr的值为const,不能修改. 2. char const *pt ...
- c++中的const关键字的理解
看effective c++第二版推荐使用const,少用define.今天才发现发现这远远不够. #define定义的常量在预处理替换,debug的时候无法打印宏的,这种常量设置是有缺陷的, con ...
- C++ const的自我理解
C++学习笔记–const const 是 constant 的缩写,本意是不变的,不易改变的意思.在 C++ 中是用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数. C++ const ...
- 我所理解的readonly和const
最近要给学校软件小组新成员讲几次课,所以把很多以前懒得学习的和模糊不清的知识点,重新学习了一下. MSDN是这样解释的: readonly 关键字与 const 关键字不同. const 字段只能在该 ...
- C++ const 理解
转载自:https://www.cnblogs.com/jiabei521/p/3335676.html 如果函数需要传入一个指针,面试官可能会问是否需要为该指针加上const,把const加在指针不 ...
- 深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p
由于没有const*运算,const实际上修饰的是前面的char*,但不能在定义时转换写成 const(char *)*p,因为在定义是"()"是表示函数. 三.深入理解7种组合 ...
- 复制构造函数2——深入理解
//如果不显示定义复制构造函数,编译会出错,原因是:在创建对象s2时,调用默认复制构造函数并用对象s1对其进行初始化,致使s2中指针 //与s1中指针指向同一储存空间,当一个对象生命周期结束后调用析构 ...
- const关键字与指针
const与指针在一起的几种情况. const int *p1; //表示p1本身不是const,指向的变量是const. const *int p2; //语法错误 int const *p3; / ...
随机推荐
- velocity基础教程--1.标准使用(zhuan)
http://llying.iteye.com/blog/387253 **************************** velocity是一个非常好用的模板引擎 这里不对项目进行详细介绍,可 ...
- 转!!URL和URI区别
URI,URL,URN 从上面的那幅图可以看出来,一共有三个不同的概念URI,URL,URN.这讨论这样的问题时,最好的方法就是回到原点啊,这里我们在RFC 3986: Uniform Resourc ...
- java 字符串(正则表达式)未完
正则表达式: 其实就是用于操作字符串的一个规则.(以某种方式描述字符串) 基础: 1.描述一个整数:\d(表示一位数字) \\d(\\ 表示要插入一个正则表达式)表示一位数字 \\\\ 插入一个普通 ...
- 【CodeForces 651A】Joysticks 模拟
题意:给定a,b,每个单位时间可以将a,b中一台加1,一台减2,求最久可以支持多久. #include <cstdio> #include <algorithm> using ...
- jQuery笔记一
陆续更新中..... 1,创建标签的时候可以提前写好,以后用clone()方法克隆即可. 如: var div=$("<div></div>"); var ...
- spring来了-06-事务控制
概述 编程式事务控制 自己手动控制事务,就叫做编程式事务控制. Jdbc代码: Conn.setAutoCommite(false); // 设置手动控制事务 Hibernate代码: Sessio ...
- 《Java程序设计》学期总结
<Java程序设计> 学期总结 课程设计小组 -迦瓦栈队 团队博客 读书笔记汇总 第一周 第二周 第三周 第四周 第五周 第六周 第七周 第八周 第九周 第十周 实验报告汇总 实验一 实验 ...
- (06)odoo报表
----------更新时间:18:06 2016-09-18 星期日18:13 2016-04-05 星期二10:31 2016-03-01 星期二----------* odoo8 采用是Qweb ...
- 学编程,学单词.....在学习中积累自己的单词(不断更新__ing)
可以去肆意大话天下,可以去小民一般的言语,但是一定要清楚,知识的积累,至于心中,即便你说这粗俗的话,你的个性,气质依旧在那,比如北大的那啥教师(心中的典范),也只有这样,你才能低至市井,上至高阁... ...
- jquery改变元素的值的函数text(),html(),val()
text() - 设置或返回所选元素的文本内容 html() - 设置或返回所选元素的内容(包括 HTML 标记) val() - 设置或返回表单字段的值,适合于标签中有value属性的标签. 代码: ...