转载:https://mp.weixin.qq.com/s?__biz=Mzk0NDYzNTI1Ng==&mid=2247483733&idx=1&sn=9af9bc64a0ba45e4a782a53622ab4f51&chksm=c320ed42f4576454a5972d7bfa779468c370a4652d34f1087587f9e42a06db19d2e5d27df6b7#rd

const和C指针

众所周知,C中可以使用const来声明常量,即限定变量的值不可以修改。

当把const用在指针上面的时候,他有两个左右:

  1. 指针本身不能修改
  2. 指针指向的值不能被修改

修改指针和修改指针的值的区别

int main(){
int a = 10, c = 10, *b = &a;
b = &c; // 这一步叫做修改指针
*b = 20 // 这一步叫修改指针的值
}

const在指针的用法

如下,定义一个指针为:int * const a表示指针a本身不可以被修改,但指针a指向的值可以被修改:

int num = 10, num2 = 30;
int * const a = #
*a = 20; // 这一步操作是合法的
a = &num2; // 这一步操作是非法的

如下,定义一个指针为:int const * a表示指针a本身可以被修改,但指针a指向的值不可以被修改:

int num = 10, num2 = 30;
int const *a = #
a = &num2; // 这一步操作是合法的
*a = 20; // 这一步操作是非法的

若把以上两种形式合在一起,也就是定义一个指针为:int const * const a,则指针a本身和其指向的值都是不可以被修改的。

int num = 10, num2 = 30;
int const * const a = #
a = &num2; // 这一步操作是非法的
*a = 20; // 这一步操作是非法的

使用强制类型转换

当我们使用强制类型转换的时候,可以强制修改一些东西。

int num = 10, num2 = 30;
int const * a = #
a = &num2; // 这一步操作是非法的
*a = 20; // 这一步操作是非法的 int *b = (int *)a
*b = 20; // 这一步操作是合法的

通常这种操作没有意义。

const的位置

值得注意的是,const int *aint const *a是完全一样的。

当的同一行定义多个变量的是后:

int const *a, *b, c;

是等价于

int const *a;
int const *b;
int const c;

即所有的部分都定义为了const,表示ab指向的值不能改,c的值不能该。

同理,

const int *a, *b, c;

是等价于

const int *a;
const int *b;
const int c;

该定义效果是等价于int const *a, *b, c的。

若是如下形式:

int *const a, *b, c;

则是等价于

int *const a;
int *b;
int c;

const只对a生效,对bc是不生效的。

总结

const*前面表示该指针的值不能被修改,在*后面表示该指针本身不能被修改。

const和C指针的更多相关文章

  1. 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, const 对象的引用

    [源码下载] 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象,  const 指针和指向 const 对象的指针, con ...

  2. const typedef 和指针的问题(这里必须初始化的才初始化了,不必须的则没有初始化)

    这里很容易搞混: tyepdef double dou;//这里是dou是double的别名 #include<iostream> using namespace std; int mai ...

  3. const对象,指向const对象的指针 和 const 指针

    const对象: const对象声明时必须赋初值,该值在编译阶段确定,不可在程序中修改. const修饰符既可放在类型名前也可放在类型名后,通常放在类型名前.不过放在类型名后易于理解. const i ...

  4. C++中的error C2662,const的this指针问题

    今天在写C++代码的时候遇到一个错误,涉及到了常量的this指针的问题. 简化后的代码如下: #include <iostream> #include <string> usi ...

  5. oc const 关键字 对指针的理解

    /* int const *p; *p是常量, p是变量 const int *p; *p是常量, p是变量 int * const p; *p是变量, p是常量 const int * const ...

  6. const引用和指针

    1.可以为const引用初始化一个非const的对象.字面值,甚至是一般表达式. 2.对引用初始化时必须严格进行类型匹配,但是const引用初始化时不需要类型匹配,只要可以转换为const所定义的类型 ...

  7. const关键字与指针

    const与指针在一起的几种情况. const int *p1; //表示p1本身不是const,指向的变量是const. const *int p2; //语法错误 int const *p3; / ...

  8. const变量指针赋值给非const类型的指针运行结果

    在c++可以定义一个const变量,然后把变量的值赋给一个非const指针,可以通过指针来改变const变量的值吗?下面的截图给出了答案

  9. c++引用和const 用法 数组 指针

    非const引用,只能用object为其赋值: <c++primer>P52 而const引用则可以用临时变量为其赋值: 如: const int &r = 32://可以 int ...

  10. const变量通过指针修改问题

    const的变量在特定情况下可以通过指针修改,但是在另一些情况下是不能通过指针修改. 以下是VC6下才测试. 1. 不能修改的情况 #include int const a = 10; void ma ...

随机推荐

  1. 洛谷题解 | P1046 陶陶摘苹果

    ​ 目录 题目描述 输入格式 输出格式 输入输出样例 说明/提示 题目思路 AC代码 题目描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出 10 个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶 ...

  2. Python并发编程——paramiko远程控制的模块、病毒攻击原理、dll注入、

    文章目录 paramiko模块 作业 攻击原理解析 一.什么是dll 二.为何要有dll 什么是dll注入: 什么时候需要dll注入 dll注入的方法 使用SetWindowsHookEx函数对应用程 ...

  3. Android Orm框架(GreenDao)

    Android Orm框架(GreenDao) 分类: android2014-04-10 14:29 723人阅读 评论(0) 收藏 举报 GreenDao与Ormlite对比 Ormlite:简单 ...

  4. 10月TIOBE榜Java跌出前三!要不我转回C#吧

    前言 Java又要完了,又要没了,你没看错,10月编程语言榜单出炉,Java跌出前三,并且即将被C#超越,很多资深人士预测只需两个月,Java就会跌出前五. 看到这样的文章,作为一名Java工程师我感 ...

  5. 【第一章 web入门】afr_3——模板注入与proc文件夹

    [第一章 web入门]afr_3--模板注入与proc文件夹 题目来源n1book,buu上的环境 看题 url中提供了name参数,类似在路径中进行了文件名查询然后展示: 随便输入一个数字: 说明肯 ...

  6. go实现一个切片迭代器

    go实现一个简单的切片迭代器 package main import "fmt" type iterator struct { data []int index int // 索引 ...

  7. Kubernetes: kube-apiserver 之认证

    kubernetes:kube-apiserver 系列文章: Kubernetes:kube-apiserver 之 scheme(一) Kubernetes:kube-apiserver 之 sc ...

  8. Excel 使用 VLOOKUP 函数匹配特定列

    前言 工作有一项内容,是根据新的表格的某一列的内容一对一匹配,生成一列新的表格.这就用到了 Excel 的 VLOOKUP 函数. 函数使用 函数体: =VLOOKUP(lookup_value,ta ...

  9. uni-app框架开发app发布流程

    uni-app框架开发app发布流程 1.首先公司申请软著 步骤:申请软著详细流程 - 阿长*长 - 博客园 (cnblogs.com) 一.安卓端 1,点击发行>原生-app云打包 正式包和自 ...

  10. ERP大作业进度(一)

    ERP和进销存的区别 ERP(企业资源计划)和进销存(进货.销售和库存管理)是两个不同的概念,尽管它们在企业管理中通常存在交集.以下是它们之间的主要区别: 范围: ERP:ERP系统是一个综合性的.集 ...