【C】——指针与const限定符
const
限定符和指针结合起来常见的情况有以下几种。
const int *a;
int const *a;
这两种写法是一样的,a
是一个指向const int
型的指针,a
所指向的内存单元不可改写,所以(*a)++
是不允许的,但a
可以改写,所以a++
是允许的。
int * const a;
a
是一个指向int
型的const
指针,*a
是可以改写的,但a
不允许改写。
int const * const a;
a
是一个指向const int
型的const
指针,因此*a
和a
都不允许改写。
指向非const
变量的指针或者非const
变量的地址可以传给指向const
变量的指针,编译器可以做隐式类型转换,例如:
char c = 'a';
const char *pc = &c;
但是,指向const
变量的指针或者const
变量的地址不可以传给指向非const
变量的指针,以免透过后者意外改写了前者所指向的内存单元,例如对下面的代码编译器会报警告:
const char c = 'a';
char *pc = &c;
即使不用const
限定符也能写出功能正确的程序,但良好的编程习惯应该尽可能多地使用const
,因为:
const
给读代码的人传达非常有用的信息。比如一个函数的参数是const char *
,你在调用这个函数时就可以放心地传给它char *
或const char *
指针,而不必担心指针所指的内存单元被改写。尽可能多地使用
const
限定符,把不该变的都声明成只读,这样可以依靠编译器检查程序中的Bug,防止意外改写数据。const
对编译器优化是一个有用的提示,编译器也许会把const
变量优化成常量。
const char **p;表示**p所代表的单元值不可改写;例 **p = ‘a’;就会报错;
char *const *p;表示*p所代表的单元值不可改写;例
int a;
a = **p;
*p = &a;
此时第三行就会报错;
char **const p;表示p的指向不能改变;例
int a = ;
int *b = &a;
p = &b;
此时第三行会报错;
【C】——指针与const限定符的更多相关文章
- 指针和Const限定符
指针和Const限定符 1.指向const对象的指针 如果指针指向的是const对象,则不允许使用指针来改变其所指的const值.C++要求指向const对象的指针具有const特性. const d ...
- Spline样条函数 //C++关键字:operator // 重载函数 // 隐含的this指针 // 指针和const限定符
在数学学科数值分析中,样条是一种特殊的函数,由多项式分段定义.样条插值是使用一种名为样条的特殊分段多项式进行插值的形式.由于样条插值可以使用低阶多项式样条实现较小的差值误差,这样就避免了使用高阶多项式 ...
- C++之const限定符
作者:tongqingliu 转载请注明出处: C++之const限定符 const初始化 const的特点: 用const加以限定的变量,无法改变. 由于const对象定义之后就无法改变,所以必须对 ...
- C++之const限定符(顶层const,底层const)
作者:tongqingliu 转载请注明出处:http://www.cnblogs.com/liutongqing/p/7050815.html C++之const限定符(顶层const,底层cons ...
- C++杂谈(一)const限定符与const指针
const限定符 c++有了新的const关键字,用来定义常变量,可以替C语言中的#define.关于const限定符,有以下需要注意: 1.创建后值不再改变 2.作用范围在文件内有效 3.添加ext ...
- C++ Primer 第二章 引用 指针 const限定符
1.引用: 为对象起了另外一个名字,引用类型引用另外一种类型,通过将声明符写成&d的形式来定义引用类型,其中d也就是声明的变量名(声明符就是变量名). PS:1.通过图片中编译所提示的报错信息 ...
- const 限定符
1.定义const对象 const限定符把一个对象转换成一个常量 const int Bufsize = 512; 定义Bufsize 为常量并初始化为512.变量Bufsize仍然是一个左值,但是不 ...
- 变量和基本类型——复合类型,const限定符,处理类型
一.复合类型 复合类型是指基于其他类型定义的类型.C++语言有几种复合类型,包括引用和指针. 1.引用 引用并非对象,它只是为一个已存在的对象所起的另外一个名字. 除了以下2种情况,其他所有引用的类型 ...
- 浅谈const限定符
什么是const限定符? Const限定符是我们通常所说的常量限定符,被const修饰的对象具有常量性质,只能读,不能写. 为什么使用const限定符? 用const变量取代“魔数”,代码更容易理解和 ...
随机推荐
- web服务器一些概念
一.Web服务器 Web服务基于HTTP协议,HTTP协议基于TCP/IP协议. HTTP请求底层必然是套接字,也就是TCP协议,HTTP服务器就是监听端口的一个守护进程. 它负责HTTP连接的建立. ...
- 使用SoapUI生成WS请求报文
WSDL地址示例:http://10.1.84.10:8100/webService/common/mail?wsdl 打开SoapUI,创建一个Project,输入wsdl地址就ok. 1.访问 ...
- C# 小叙 Encoding (一)
前言 众所周知计算机只能识别二进制数字,如1010,1001.我们屏幕所看到的文字,字符都是和二进制转换后的结果.将我们的文字按照某种规则转换二进制存储在计算机上,这一个过程叫字符编码,反之就是解码. ...
- RabbitMQ消息队列(五):Routing 消息路由 2[原]
上一篇文章使用的是Direct的Exchange,但是没有指定Queue的名字,这样只能是先运行Consumer之后,Producer在运行发消息Consumer才能收到,否则先运行Producer发 ...
- RHEL7 -- 使用team替换bonding实现链路聚合网卡绑定
将网卡enp0s8.enp0s9进行链路绑定 安装teamd包 # yum install teamd 创建一个team链接 # nmcli con add con-name team0 type t ...
- PO_从PO追溯PR的方式和表(分析)
2014-06-03 Created By BaoXinjian
- linux下安装nginx和配置
1.系统:centos6.8 2.安装准备: 安装nginx前,我们首先要确保系统安装了g++.gcc.openssl-devel.pcre-devel和zlib-devel软件,可通过如图所示命令进 ...
- Python log10() 函数
描述 log10() 方法返回以10为基数的x对数,x>0. 语法 以下是 log10() 方法的语法: import math math.log10( x ) 注意:log10()是不能直接访 ...
- 多进程对 MySQL update的影响
今天要做数据清洗的时候,要更新一个数据库字段,考虑到用多进程去更新数据库,也许程序会跑得快一些,结果开了64个进程, 结果是其他程序更新的时候,速度非常慢,最后发现的原因是,数据库中有64个SQL语句 ...
- django带后台管理功能的网站
一.原起: 我大学是学的.Net平台.在那个平台上开发网站用的是ASP.NET这门技术:在那里对数据库的处理.为了 方便写代码,通常也是会用ORM(对象关系模型映射):毕业后搞起了MySQL数据库.自 ...