指针和const一些注意事项
1、常量指针(底层const)
指向常量的指针,指针所指向的对象的值无法被修改,若想存放常量对象的地址,只能使用指向常量的指针。
2、指针常量(顶层const)
指针本身是常量,指针本身的值不可修改。
int i=;
int *const pi=&i; //指针常量pi一直指向i
const double dp=3.1415;
const double *const dp1=&dp;//dp1是一个指向常量对象的指针常量
注意:1)一般来说,顶层const可以表示任意对象是常量,而底层const一般与指针或者引用等复合数据类型的基本类型部分有关。
2)指针也可以是顶层const,也可以是底层const,这个与其他类型有较大区别。
3)用于声明引用的const都是底层引用。
4)当执行对象的拷贝操作时,拷入和拷出的对象必须具有相同的底层const资格,或者两者的数据类型能够相互转换(针对的是具有顶层或者底层区别的指针或者引用)。
5)引用只有底层const这种说法,即绑定的对象是常量,而顶层底层const只对指针来说。
3、指针、常量和类型别名
假设声明一个pstring,来作为char *的别名:
typedef char* pstring;
const pstring cstr=;
const pstring *ps;
注意:1)不能将本来的char* 代到2、3行中变成:const char* cstr=0; const char* *ps; 这样的意思是定义一个指向常量的指针常量,然而这样是错的。
2)当类型别名与指针、常量一起使用时,要小心,应当将pstring看成一个整体,即一个指向char的指针,而const是用来修饰这个整体的,所以上面2、3行代码分别是:一个指向char的指针常量 一个指向char的指针常量的指针
指针和const一些注意事项的更多相关文章
- 指向const的指针和const指针
1.指向const的指针:const int *p 或 int const *p 解释:p是一个指针,指向const int类型的常量:指针指向的内容为常量,因此不能改变*p的值,但指针p可以改变,指 ...
- C++中的指针与const
刚开始接触C++时,指针和const之间的关系有点混乱,现在总结如下: 一.指向const变量的指针 #include<iostream.h> void main() { const in ...
- C++ Prime:指针和const
与引用一样,也可以令指针指向常量或非常量,类似于常量引用,指向常量的指针不能用于改变其所指对象的值.要想存放常量对象的地址,只能使用指向常量的指针: const double pi = 3.14; / ...
- 指针和Const限定符
指针和Const限定符 1.指向const对象的指针 如果指针指向的是const对象,则不允许使用指针来改变其所指的const值.C++要求指向const对象的指针具有const特性. const d ...
- C++指针与const
在C++中,const修饰符一般用于修饰常量.常量在定义的时候必须初始化,而且值一旦定义之后就不能修改,这样就能保证常量的值在程序运行过程中不会发生变换. 1.指向const对象的指针 指向const ...
- void指针和const指针
void指针:主要是便于传递不同类型的参数 const指针: const char *p :const 在* 的左边表示指向一个常量指针:表示指向的内容不可变(*p不能变,p可以改变) int a = ...
- [C++ Primer Plus] 第7章、函数(一)程序清单——递归,指针和const,指针数组和数组指针,函数和二维数组
程序清单7.6 #include<iostream> using namespace std; ; int sum_arr(int arr[], int n);//函数声明 void ma ...
- 不能将“this”指针从“const SqQueue<ElementType>”转换为“SqQueue<ElementType> &
错误 1 error C2662: “int SqQueue<ElementType>::getLength(void)”: 不能将“this”指针从“const SqQueue<E ...
- 【C】——指针与const限定符
const限定符和指针结合起来常见的情况有以下几种. const int *a; int const *a; 这两种写法是一样的,a是一个指向const int型的指针,a所指向的内存单元不可改写,所 ...
随机推荐
- HDU 4135 Co-prime(容斥:二进制解法)题解
题意:给出[a,b]区间内与n互质的个数 思路:如果n比较小,我们可以用欧拉函数解决,但是n有1e9.要求区间内互质,我们可以先求前缀内互质个数,即[1,b]内与n互质,求互质,可以转化为求不互质,也 ...
- vim 操作快捷键 待更~
shift + g 文件尾 ------ gdb p print start 从main函数开始 n next换行 s step 进入函数
- ACM-ICPC 2018 徐州赛区网络预赛 J. Maze Designer 最大生成树 lca
大概就是要每两个点 只能有一条路径,并且约束,最短的边用来砌墙,那么反之的意思就是最大的边用来穿过 故最大生成树 生成以后 再用lca计算树上两点间的距离 (当然防止生成树是一条链,可以用树的重心作为 ...
- json字符串在javascript和java代码中的表示方式
最近在使用js写json形式的字符串的时候,当我把json形式的字符串放到函数JSON.parse()的时候,总是报错Uncaught SyntaxError: Unexpected token ' ...
- python 二进制数相加
def add_binary_nums(x,y): max_len = max(len(x), len(y)) x = x.zfill(max_len) y = y.zfill(max_len) re ...
- 将正在使用的Ubuntu14.04 制作成镜像文件
remastersys 是一个能够备份你的ubuntu系统的工具. 源码在github上能找到:Remastersys Source 可以直接 apt 安装: sudo add-apt-reposit ...
- ubuntu16.04 server(amd 64) 下载
http://mirrors.aliyun.com/ubuntu-releases/16.04/ http://old-releases.ubuntu.com/releases/16.04.3/
- HTML元素1: 基本元素,标题,段落,链接,图像等
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- SQL Insert Case When Update
CREATE TABLE LoadTestTable ( ID INT IDENTITY(1,1), FIRSTNAME VARCHAR(50), LASTNAME VARCHAR(50), GEND ...
- Cassandra学习笔记
CASSANDRA在工作中用过,但是用的项目少,能用却了解的不全面.今天来稍加学习下: http://zqhxuyuan.github.io/2015/10/15/Cassandra-Daily/ ...