C Const
C90增加了两个属性:不变性和易变性.
通过关键字const 和 volatile 声明的, 这样就创建了受限类型(qualified type).
C99 增加了第三个限定词restrict, 用以方便编译器优化。
类型限定词 const
如果变量声明中带有关键字const,则不能通过赋值、增量或减量来修改该变量的值。
const int nochange; /* constant */ nochange = 12 /* false */
可以初始化一个const 变量, 初始化之后,不可以再改变它。
const int nochange = 12 // true const int days1[3] = {31,30,31}; // true
在指针和参量声明中使用const
特别注意区分: 指针本身是const 与 指针指向的值是const
const 紧挨着的是什么,什么就是不变的
const int days1[3] = {31,30,31}; // true 相当于 const int *days1 ; const在 * 左边, 使得数据成为常量
const float *pf ; // const 紧挨着 float ,说明 float常量是不变的
float *const pt ; // const紧挨着 指针pt,说明是一个常量指针
float const *pt; // const紧挨着 *pt, 相当于解引用,是float 常量,不是指针,注意区分
后面有更好的理解方法!!!
1. 指针指向的值是const
const float *pf ; // pf 指向一个常量
特别注意: const放置在不同的位置,有不同的含义,注意区分!!!
float const *pfc; // 等同于 const float *pfc
把const放在 类型名 的后边和 * 的前边,意味着指针不能够用来改变它所指向的值。
总之:下面理解起来比较容易
一个位于 *左边 任意位置的 const 使得 数据成为常量
而 一个位于 * 右边 的const使得 指针自身成为常量 。
但是pf本身的值是可以改变的(本身是个地址),它可以指向另一个const值。
eg:
const float *pf_new;
pf = pf_new;
2. 指针本身是const (指针本身的值不可变)
eg:
float * const pt; // pt 是一个常量指针
等同于下面的写法
float const *pt // pt 是一个常量指针
必须总是指向同一个地址,但所指向的值可以改变。
3. 地址是常量,地址指向的内容也是常量
const float * const ptr;
意味着ptr必须总是指向同一个位置(地址),并且它所指位置存储的值也不能改变。
4. 常见用法
常见用法是声明作为函数形式参量的指针。
eg:
一个名为display()的函数显示一个数组的内容。 为了使用它,可以把数组名作为参数传送,但数组名是一个地址,
这样做将允许函数改变调用函数中的数据。下面的原型防止了这样的情况发生。
void display(const int array[], int limit);
在函数原型和函数头部,参量声明 const int array[] 与 const int *array, 该声明表明array指向的数据是不可变的。
5. 对全局数据使用const
6. const 指针变量间的赋值关系
const指针 必须 赋值给 const 指针
但是,非const型指针 可以 赋值给cons指针
7 QAC 0431
8 编码实践
原文地址:https://www.cnblogs.com/focus-z/p/11485612.html
- 移动商城第四篇(商品管理)【添加商品续篇、商品审核和上下架、前台展示、后台筛选】
- 移动商城第五篇(用户模块)【用户登陆、回显用户、拦截器、收货地址】
- 移动商城第六篇【单品查询、静态化页面】
- 移动商城第七篇【购物车增删改查、提交订单】
- Shiro入门这篇就够了【Shiro的基础知识、回顾URL拦截】
- OFTest(一):如何忽略一些字段在端口poll报文
- Shiro第二篇【授权、整合Spirng、过滤器】
- Ajax数据的爬取(淘女郎为例)
- 在IDEA中编写Spark的WordCount程序
- Shiro第三篇【授权过滤器、与ehcache整合、验证码、记住我】
- Spark核心RDD、什么是RDD、RDD的属性、创建RDD、RDD的依赖以及缓存、
- Caused by: java.net.ConnectException: Connection refused: master/192.168.3.129:7077
- java.util.zip.ZipException: invalid LOC header (bad signature)
- 递归就这么简单
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- ubuntu下rz/sz命令的安装与使用说明
- Linux环境变量配置的完整攻略
- linux中使用boost.python调用c++动态库的方法
- linux下pip的安装步骤及使用详解
- CentOS7安装配置 Redis的方法步骤
- Linux下Oracle如何导入导出dmp文件详解
- Linux中samba服务器的搭建教程
- linux环境搭建图数据库neo4j的讲解
- Linux编程之ICMP洪水攻击
- linux搭建squid代理服务器的完整步骤
- 使用wget递归镜像网站
- 整理Linux中字符串的相关操作技巧
- Ubuntu 16.04下无法安装.deb的解决方法
- 关于linux中系统输入输出的管理详解
- Linux下IP设置脚本的实例及遇到问题解决办法