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?采用符号常量写出的代码更容易维 ...
随机推荐
- GIT 基础操作-初始化
命令行说明 全局设置 git config --global user.name "" git config --global user.email "" 创建 ...
- golang倒腾一款简配的具有请求排队功能的并发受限服务器
golang官方指南给了一些代码片段来,层层递进演示了信道的能力: 1>. 信号量 2>. 限流能力 var sem = make(chan int, MaxOutstanding) fu ...
- Qt QSqlDatabase的removeDatabase需要注意的地方
文章目录 问题描述 Qt官方解决方法 另外一种解决方式 碎碎念 关于智能指针 问题描述 今天在做之前代码的重构的时候,在调用QSqlDatabase的removeDatabase函数的时候,出现了如下 ...
- mysql -- 自定义函数及循环结构
和存储过程类似,区别在于存储过程可以有0个或多个返回,但是函数只能有唯一一个返回值 一般而言,存储过程适合批量插入,批量删除,增删改:函数则用于处理数据,查询某个值. 创建 create functi ...
- kubeadm安装kubernetes
kubeadm安装kubernetes kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群的工具. 这个工具能通过两条指令完成一个 kubernetes 集群的部署: $ k ...
- Kubernetes 编译 kubeadm 修改证书有效期到 100 年
前言 kubeadm 生成的客户端证书在 1 年后到期.过期后,会导致服务不可用,使用过程中会出现:x509: certificate has expired or is not yet valid. ...
- MySQL REPLACE函数:字符串替换
语法 REPLACE ( string_expression , string_pattern , string_replacement ) 替换字符串,接受3个参数,分别是原字符串,被替代字符串,替 ...
- go sync.map的使用
前言 数据竞争是并发情况下,存在多线程/协程读写相同数据的情况,必须存在至少一方写.另外,全是读的情况下是不存在数据竞争的. Go语言中的 map 在并发情况下,只读是线程安全的,同时读写是线程不安全 ...
- 一个属性同时使用Autowired和Resource注解会发生什么?
首发于公众号:BiggerBoy 右侧图片wx扫码关注有惊喜 欢迎关注,查看更多技术文章 如题,如果在同一个属性上使用@Autowired注解注入bean1,然后使用@Resource注解注入bean ...
- 泛型(Generics)
Java中的泛型(Generics)是JDK 5引入的一种特性,它使得类.接口和方法能够以一种类型参数化的方式进行定义和使用.泛型的主要目的是增强代码的类型安全性和可读性,同时减少类型转换(cast) ...