const关键字和指针
const指针
const关键字

1.const int p
const int p 与 int const p 是等价的。
用const修饰变量 p 时,则 p 成为只读变量,必须在定义的同时初始化,不能在其他地方被重新赋值。
即这个变量就只能作为右值(赋值给别人),不能成为左值(接收别人的赋值)。

2.const int *p
当把 const 放最前面的时候,它修饰的就是 p,p 表示的是指针变量 p 所指向的内存单元里面的内容,即这个内容不可变。

const 可以禁止指针变量 p 修改变量 x 中的值,但变量 x 自己也可以修改自己的值。如下图所示,p指向的地址没有变,但变量 x的值可以变。

另外,p 中存放的是指向的内存单元的地址,这个地址是可变的。如下图所示,p 开始指向 x ,后面修改为指向 y。

const int *p 与 int const *p 是等价的。
3.int * const p
这里 const 修饰的是 p,所以 p 中存放的内存单元的地址不可变,但内存单元中的内容是可变的。即 p 的指向不可变,p 所指向的内存单元的内容可变。
此时,p 中存放的内存单元的地址,必须在定义的同时初始化,如下图所示。

而 p 所指向的内存单元的内容可变,如下图所示。

4.const int * const p
此时 *p 和 p 都被修饰了,那么 p 中存放的内存单元的地址和内存单元中的内容都不可变。
总结
- const int *p:p可变,p指向的内容不可变
- int * const p:p不可变,p指向的内容可变
- const int * const p:p和p指向的内容都不可变
const关键字和指针的更多相关文章
- oc const 关键字 对指针的理解
/* int const *p; *p是常量, p是变量 const int *p; *p是常量, p是变量 int * const p; *p是变量, p是常量 const int * const ...
- const关键字与指针
const与指针在一起的几种情况. const int *p1; //表示p1本身不是const,指向的变量是const. const *int p2; //语法错误 int const *p3; / ...
- C语言const关键字的作用
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <string.h> 4 #include ...
- const关键字与数组、指针
目录 const关键字 const修饰数组 const修饰指针 用两个const修饰指针 @ 开始回顾C基础知识.C中使用指针是很危险的事情,一个不慎就会造成程序崩溃,因此对于传入函数的参数进行保护就 ...
- 实习第一个月总结(const关键字、条件编译、volatile关键字、#和##的作用、函数指针)
C语言中const关键字的作用: 修饰局部变量或者全局变量,表示变量n的值不能被改变了 修饰指针,分为常量指针与指针常量,也可以两者结合 常量指针指向的值不能改变,但是这并不是意味着指针本身不能改变, ...
- C++ 二级指针与 const 关键字
可用七种不同的方式将 const 关键字用于二级指针,如下所示: //方式一:所指一级指针指向的数据为常量,以下几种为等效表示 const int ** pptc; //方式一 int const * ...
- 关于C++指针、引用和const关键字的各种关系
#include <stdio.h> #include<iostream> using namespace std; typedef char *new_type; int m ...
- Const关键字
const const是一个C语言的关键字,它限定一个变量不允许被改变.使用const在一定程度上可以提高程序的安全性和可靠性.另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程 ...
- C++中const关键字的使用总结
C++中使用const关键字来修饰常量,下面从两个方面总结:变量和成员函数. 变量:const可以修饰普通变量.指针(数组)和结构体. 1.const修饰普通变量是最简单的情形.这样的用法多为在程序中 ...
- (转) C/C++中const关键字详解
文章转自 http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777416.html 为什么使用const?采用符号常量写出的代码更容易维 ...
随机推荐
- k8s报错Error: template: nvidia-device-plugin/templates/gfd.yml:22:19: executing "nvidia-device-plugin/templates/gfd.yml" at <.Subcharts.gfd>: nil pointer evaluating interface {}.gfd
前言 在安装 kubernetes 插件 k8s-device-plugin时,报错: Error: template: nvidia-device-plugin/templates/gfd.yml: ...
- vue 格式化时间戳
前言 有时候我们需要前端处理后端传过来的时间戳进行格式化为日期. Html部分 template中这样使用,需要处理的字段名,再加上过滤器方法 <el-table-column label=&q ...
- php去除金额后面多余的0(零)
第一种: 使用floatval() 第二种: rtrim(rtrim($str, '0'), '.'); 比如$str=2.360000; 最后会输出2.36 第三种使用正则: /** * 去除多余的 ...
- MySQL-对Change Buffer的理解
Change Buffer的处理过程 对非唯一的普通索引的新增或更新操作,如果索引B+树的需要新增或更新的数据页不在内存中,则直接更新change buffer,等到后面需要使用这个数据页(真正读到内 ...
- 【SpringCloud】微服务架构编码构建
微服务架构编码构建 约定>配置>编码 Mysql的主从 slave会从master读取binlog来进行数据同步 三步骤+原理图 MySQL复制过程分成三步: master将改变记录到二进 ...
- 什么是MIME类型-基础知识补全
MIME类型(Multipurpose Internet Mail Extensions,多用途互联网邮件扩展)是一种标准,用于标识互联网上传输的文件类型.它最初是为电子邮件设计的,后来被广泛应用于W ...
- CoreOS 重启策略
对于已经启动了的 CoreOS 集群,可以通过编辑/etc/coreos/update.conf文件来修改重启策略. 重启策略有以下4种: best-effort(默认):如果 etcd 运行正常则相 ...
- 学习unigui【27】像pg的jsonb一样编辑json。
var I: Integer; CurrentObject: TJSONObject; FieldName: string; Pair: TJSONPair;function CreateJS ...
- Codeforces Round 952 (Div. 4)
知识点模块 1.一个正方体x,y,z里面可以放多少个边长为a,b,c的长方体 ans=(x-a+1)*(y-b+1)*(z-c+1) 题解模块 A.Creating Words 交换两个字母的首字母即 ...
- 🎀Java-Exception与RuntimeException
简介 Exception Exception 类是所有非致命性异常的基类.这些异常通常是由于编程逻辑问题或外部因素(如文件不存在.网络连接失败等)导致的,可以通过适当的编程手段来恢复或处理.Excep ...