最近恰好在学习浙江大学翁恺老师的《C语言程序设计》,老师对指针与const的见解颇深,感兴趣可在mooc搜索视频观看9.1-5节

在开始之前,先介绍一条const的规则:const默认与其左边结合,当左边没有任何东西则与右边结合。(来自知乎:C++里 const int* 与 int const* 有什么区别?)

那么首先先来谈谈const int *与int const *的区别与联系,由上面的规则其实很容易知道:const int *与int const *其实并无很大区别,可以根据个人编码习惯自行选择。它们都表示“不能通过这个指针去修改那个变量”。不过需要注意的是,这并不能使得那个变量成为const。下面举一个简单例子:

#include <stdio.h>int main()
{const int *p1;int const *p2;const int i = 0;int m = 1;int n = 2;p1 = &i;          //p1可以指向const int ip1 = &m;          //p1也可以指向int型变量m//*p1 = 3;        //[Error] assignment of read-only location '*p1',*p1是只读的m = 3;           //直接修改变量m的值是允许的int *p3 = &i;     /*[Warning] initialization discards 'const' qualifier from pointer target type [enabled             by default],把const int的地址交给指向int的指针则会给warning*/p2 = &i;          //p2的结果与p1一致p2 = &m;//*p2 = 4;        //[Error] assignment of read-only location '*p2'       m = 4;return 0;
} 

由上面代码可以看到,p1和p2既可以指向普通的int型变量,也可以指向const int,但是不能通过指针去修改变量。

而对于int *const,则是表示“一旦得到了某个变量的地址,不能再指向其他变量”,const此时修饰指针,这也符合上面介绍的规则。下面同样举一个简单例子:

#include <stdio.h>int main()
{int m = 0;int n = 0;int *const p3 = &m;*p3 = 1;            //允许通过指针修改变量的值m = 1;              //也允许直接修改变量的值p3 = &n;            //[Error] assignment of read-only variable 'p3',p3不能指向其他变量p3++;               //[Error] increment of read-only variable 'p3',不能对p3做加一操作return 0;
}

最后总结一下:

浅谈const int *,int const *与int *const相关推荐

  1. python数字类型floatcomplexint_浅谈python 四种数值类型(int,long,float,complex)

    Python支持四种不同的数值类型,包括int(整数)long(长整数)float(浮点实际值)complex (复数),本文章向码农介绍python 四种数值类型,需要的朋友可以参考一下. 数字数据 ...

  2. python中long类型_浅谈python 四种数值类型(int,long,float,complex)

    Python支持四种不同的数值类型,包括int(整数)long(长整数)float(浮点实际值)complex (复数),本文章向码农介绍python 四种数值类型,需要的朋友可以参考一下. 数字数据 ...

  3. 浅谈对C#中var与int的认识

    对于我们所熟知的c语言来说,int用来定义整型变量(将变量定义为整型数),在其定义的时候就给变量分配空间,但是当给int型数据赋值实型数的时候可能会报错. eg: int i= 0: 而var是在ne ...

  4. python中内置的四种数值类型为_浅谈python语言四种数值类型

    Python语言支持四种不同的数值类型,包括int(整数)long(长整数)float(浮点实际值)complex (复数),本文章向码农介绍python 四种数值类型,需要的朋友可以参考一下.希望对 ...

  5. 对于这个函数const int func(const int a) const声明中,三个const分别是什么意思?...

    第一个const 函数的返回值类型是const. 这个const修饰没什么意义,你可以想象一下: 既然是函数的 返回值,而且是值传递的形式,是否const有什么意义.如果指针(引用)传递,怎表示返回值 ...

  6. int *p,cons int *p,int const *p,int * const p,const int * const p,int const * const p的区别

     加有const关键字的几种情况的辨析 const修饰的代码 含义(特点) 等价性 int *p = # 1.       可以读自己 2.       可以通过*p改自己 3.       可以 ...

  7. int CWnd::GetWindowTextW(LPTSTR,int) const”: 不能将参数 1 从“char [10]”转换为“LPTSTR”

    问题描述: [cpp] view plaincopy //定义了三个编辑框控件 接受num1 num2 num3 void CTestDlg::OnBnClickedButton1()   //响应按 ...

  8. c语言const 修饰二级指针,C++中const修饰二级指针(从类型‘int**’到类型‘const int**’的转换无效)...

    先上代码: void func(const int ** arg) { } int main(int argc, char **argv) { int **p; func(p); return 0; ...

  9. 浅谈const和constant(常量)

    常量被存储在常量区,并且表示常量不能被修改 当我们在定义一个字符串时 正确的规范应该是 const char*str="hello"; 它代表我们这个字符串常量不能被修改,但是你会 ...

  10. C/C++ 由int (*p)[5]与int *p[5]引发的学习与思考

    由int (*p)[5]与int *p[5]引发的学习与思考 最近在大一上复习指针这部分时,有个C指针的特例一直困扰着我.我查阅了许多课本,也看了CSDN上许多大佬的理解.自我感觉受益匪浅,现记录下自 ...

最新文章

  1. RedHat Enterprise Linux 5下配置Apache+Mysql+Php
  2. eBay的Turmeric和VJet的源程序移到了GitHub上
  3. java web基本流程
  4. 特定于数据中心的人工智能完成任务的速度可以提高两倍
  5. 全球及中国水软化盐行业消费规模及市场现状调研分析报告2022-2027年
  6. echarts formatter_vue使用echarts的方法
  7. 链表题目---4 删除链表中重复的结点 和 判断链表是否为回文链表
  8. “约见”面试官系列之常见面试题之第四十五篇CSS优先级(建议收藏)
  9. Android睡眠唤醒机制--Kernel态
  10. 02-eclipse中使用git
  11. [Java] 蓝桥杯 BASIC-4 基础练习 数列特征
  12. 网页设计与网站组建标准教程(2013-2015版)
  13. iOS框架引见--媒体层
  14. 迪斯尼计算机动画,迪斯尼经典动画的十大运动规律
  15. 你的数字生活:如何转变为一个个0和1?
  16. 【渝粤题库】陕西师范大学203041 行政法与行政诉讼法学作业
  17. linux 使用icc运行tcl,ICC的步骤流程方法
  18. 大白话Vue之publicPath
  19. colored manual page
  20. 【网络流24题】太空飞行计划问题

热门文章

  1. 学JAVA编程用什么电脑配置_学习编程,你真正需要的是什么样配置的电脑?
  2. Java是什么?怎么学Java?
  3. java 结束程序_如何优雅地停止Java进程
  4. Android Studio报错:No key with alias xxx found in keystore xxx 解决方法
  5. 【linux】循序渐进学运维-基础篇-linux运维级别
  6. 【万兴PDF专家】OCR引擎的离线安装方法,让你不受网速的折磨,PDF给OCR成可搜索的高级PDF,牛逼了我的万兴
  7. 荣盛发展,或正在步华夏幸福后尘
  8. 面试题:kafka的ACK参数-1,0,1分别代表的含义
  9. openlayers中使用rBush(R树)来存放要素等信息,本文修改了一点其中的rbush源码中的demo,使用canvas画出了insert和delete操作(建立树和删除树中数据)
  10. TensorRT:NvInfer.h-上篇