浅谈const int *,int const *与int *const
最近恰好在学习浙江大学翁恺老师的《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相关推荐
- python数字类型floatcomplexint_浅谈python 四种数值类型(int,long,float,complex)
Python支持四种不同的数值类型,包括int(整数)long(长整数)float(浮点实际值)complex (复数),本文章向码农介绍python 四种数值类型,需要的朋友可以参考一下. 数字数据 ...
- python中long类型_浅谈python 四种数值类型(int,long,float,complex)
Python支持四种不同的数值类型,包括int(整数)long(长整数)float(浮点实际值)complex (复数),本文章向码农介绍python 四种数值类型,需要的朋友可以参考一下. 数字数据 ...
- 浅谈对C#中var与int的认识
对于我们所熟知的c语言来说,int用来定义整型变量(将变量定义为整型数),在其定义的时候就给变量分配空间,但是当给int型数据赋值实型数的时候可能会报错. eg: int i= 0: 而var是在ne ...
- python中内置的四种数值类型为_浅谈python语言四种数值类型
Python语言支持四种不同的数值类型,包括int(整数)long(长整数)float(浮点实际值)complex (复数),本文章向码农介绍python 四种数值类型,需要的朋友可以参考一下.希望对 ...
- 对于这个函数const int func(const int a) const声明中,三个const分别是什么意思?...
第一个const 函数的返回值类型是const. 这个const修饰没什么意义,你可以想象一下: 既然是函数的 返回值,而且是值传递的形式,是否const有什么意义.如果指针(引用)传递,怎表示返回值 ...
- 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. 可以 ...
- int CWnd::GetWindowTextW(LPTSTR,int) const”: 不能将参数 1 从“char [10]”转换为“LPTSTR”
问题描述: [cpp] view plaincopy //定义了三个编辑框控件 接受num1 num2 num3 void CTestDlg::OnBnClickedButton1() //响应按 ...
- c语言const 修饰二级指针,C++中const修饰二级指针(从类型‘int**’到类型‘const int**’的转换无效)...
先上代码: void func(const int ** arg) { } int main(int argc, char **argv) { int **p; func(p); return 0; ...
- 浅谈const和constant(常量)
常量被存储在常量区,并且表示常量不能被修改 当我们在定义一个字符串时 正确的规范应该是 const char*str="hello"; 它代表我们这个字符串常量不能被修改,但是你会 ...
- C/C++ 由int (*p)[5]与int *p[5]引发的学习与思考
由int (*p)[5]与int *p[5]引发的学习与思考 最近在大一上复习指针这部分时,有个C指针的特例一直困扰着我.我查阅了许多课本,也看了CSDN上许多大佬的理解.自我感觉受益匪浅,现记录下自 ...
最新文章
- RedHat Enterprise Linux 5下配置Apache+Mysql+Php
- eBay的Turmeric和VJet的源程序移到了GitHub上
- java web基本流程
- 特定于数据中心的人工智能完成任务的速度可以提高两倍
- 全球及中国水软化盐行业消费规模及市场现状调研分析报告2022-2027年
- echarts formatter_vue使用echarts的方法
- 链表题目---4 删除链表中重复的结点 和 判断链表是否为回文链表
- “约见”面试官系列之常见面试题之第四十五篇CSS优先级(建议收藏)
- Android睡眠唤醒机制--Kernel态
- 02-eclipse中使用git
- [Java] 蓝桥杯 BASIC-4 基础练习 数列特征
- 网页设计与网站组建标准教程(2013-2015版)
- iOS框架引见--媒体层
- 迪斯尼计算机动画,迪斯尼经典动画的十大运动规律
- 你的数字生活:如何转变为一个个0和1?
- 【渝粤题库】陕西师范大学203041 行政法与行政诉讼法学作业
- linux 使用icc运行tcl,ICC的步骤流程方法
- 大白话Vue之publicPath
- colored manual page
- 【网络流24题】太空飞行计划问题
热门文章
- 学JAVA编程用什么电脑配置_学习编程,你真正需要的是什么样配置的电脑?
- Java是什么?怎么学Java?
- java 结束程序_如何优雅地停止Java进程
- Android Studio报错:No key with alias xxx found in keystore xxx 解决方法
- 【linux】循序渐进学运维-基础篇-linux运维级别
- 【万兴PDF专家】OCR引擎的离线安装方法,让你不受网速的折磨,PDF给OCR成可搜索的高级PDF,牛逼了我的万兴
- 荣盛发展,或正在步华夏幸福后尘
- 面试题:kafka的ACK参数-1,0,1分别代表的含义
- openlayers中使用rBush(R树)来存放要素等信息,本文修改了一点其中的rbush源码中的demo,使用canvas画出了insert和delete操作(建立树和删除树中数据)
- TensorRT:NvInfer.h-上篇