C语言中Const与指针(转载)
一、说明指针常量、指向常量的指针和指向常量的常量指针的含义、区别和共同点
首先,以上三种概念的共同点:都指的是指针
指针也是一种变量,它存储指定类型的变量的内存地址,如char* 来声明一个字符型指针变量,跟其它变量一样,当其值不可改变时,该指针变量就成为了指针常量,既是常量,它当然一直指向同一个内存地址,而不能被改变。
指向常量的指针顾名思义就是说其指向的那个地址的值不是变量而是常量了,即其指向的内存地址的内容将不能被改变,而指针本身则可以改变。
指向常量的指针常量最好理解,结合以上两者的含义即可知道,其特点就是指针本身的值(即指向的内存地址)和指针指向内存地址的内容均是常量,不能被改变。
二、const的应用举例及说明
//指针常量
char str[5] = "abcd"; //声明一个字符数组
char * const pStr = str; //让pStr指针指向字符数组变量str;pStr该指针常量值(即指向的内存地址)不能被改变。
//分别执行以下语句的结果,可以体现它的特点
pStr = "asdfaf" ; //企图让pStr 指针常量指向另一个地址,结果报错!
*pStr = 'd'; //修改pStr指针常量指向的内存地址中第一个字符的内容为d,结果正确,第一个字符被修改。
//指向常量的指针
char str[5] = "abcd"; //声明一个字符数组
const char * pStr = str; //让pStr指针指向字符数组常量str,该字符数组不能被改变;
//分别执行以下语句的结果,可以体现它的特点
pStr = "asdfaf" ; //让pStr 指针常量指向另一个地址,结果正确,pStr不再指向str字符数组常量,而指向了字符串asdfaf的首地址!
*pStr = 'd'; //修改pStr指针常量指向的内存地址中第一个字符的内容为d,结果错误,常量不能被修改。
//指向常量的指针常量
char str[5] = "abcd"; //声明一个字符数组
const char * const pStr = str; //让pStr指针指向字符数组常量str,该字符数组不能被改变;
//分别执行以下语句的结果,可以体现它的特点
pStr = "asdfaf" ; //让pStr 指针常量指向另一个地址,结果错误,此时是指针值不能被改变!
*pStr = 'd'; //修改pStr指针常量指向的内存地址中第一个字符的内容为d,结果错误,此时是内容不能被改变。
三、const声明的变量必须要进行初始化赋值
如果错过了这个机会,以后就别想再给常量赋值了
const int a = 0 和 int const a = 0的作用相同
const要求所修饰的对象为常量,不可被改变,不可作为左值
C语言中Const与指针(转载)的更多相关文章
- [原创]c语言中const与指针的用法
最近一直在准备笔试,补补大一大二欠下的课.复习c语言时碰见这么个题: 1 2 3 4 5 int a=248, b=4; int const c=21; const int *d=&a; ...
- C/C++语言中const的用法
1. const 在C和C++中的区别 C++中的const正常情况下是看成编译期的常量,编译器并不为const分配空间,只是在编译的时候将期值保存在名字表中,并在适当的时候折合在代码中. 所 ...
- C-C++到底支不支持VLA以及两种语言中const的区别
C-C++到底支不支持VLA以及两种语言中const的区别 到底支不支持VLA VLA就是variable-length array,也就是变长数组. 最近写程序的时候无意间发现,gcc中竟然支持下面 ...
- C语言中const和数组
C语言中const的用法 const:在定义变量时,如果使用关键字const,那就表示限制这个变量值不允许被改变. (1) 修饰变量 const离谁越近,谁的值就不能改变. int const ...
- C语言中file文件指针概念及其操作 (转载)
文件 文件的基本概念 所谓"文件"是指一组相关数据的有序集合. 这个数据集有一个名称,叫做文件名.实际上在前面的各章中我们已经多次使用了文件,例如源程序文件.目标文件.可执行文件. ...
- C语言中const关键字的用法
关键字const用来定义常量,如果一个变量被const修饰,那么它的值就不能再被改变,我想一定有人有这样的疑问,C语言中不是有#define吗,干嘛还要用const呢,我想事物的存在一定有它自己的道理 ...
- C语言中const的正确用法
今天看<Linux内核编程>(Claudia Salzberg Podriguez等著)时,文中(p39)有一个错误,就是关于const的用法. 原文中举例说明:const int *x中 ...
- C语言中const的用法总结
const是一个C语言的关键字,它限定一个变量不允许被改变.使用const在一定程度上可以提高程序的安全性和可靠性,另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程 ...
- C语言中const有什么用途
自己上网查的资料. 可以定义const常量,具有不可变性.例如:const int Max=100; Max++会产生错误; 便于进行类型检查,使编译器对处理内容有更多了解,消除了一些隐患.例如: v ...
随机推荐
- iOS中的 SB和XIB的前世今生
今天给大家介绍一下Apple开发中三种几种常用的应用程序编写方式:纯代码创建.使用storyboard/XIB.我们都知道,纯代码编写模式适合大型项目大规模使用,利于版本管理.追踪改动以及代码合并,代 ...
- 关于hibernate子查询参数的问题
private Map<String, Object> createWblHqlContext(boolean needGroup, String startDate, String en ...
- [置顶] cocos2d-x 植物大战僵尸(13)类似酷跑的【同一角色不同动画间的切换的实现】
有几天没和大家分享博客了,原因很简单,就是我在运行第12章所写的代码时:(开始一切正常,不过没多久就出现了内存泄露!.可能求成心切吧,当时没多加考虑就把代码发上去了.我在此对看过第12章得 ...
- C#调用Java方法
C#调用Java方法(详细实例) 阅读目录 C#调用c++ C#调用JAVA方法 C#可以直接引用C++的DLL和转换JAVA写好的程序.最近由于工作原因接触这方面比较多,根据实际需求,我们通过一个具 ...
- hibernate 事务的隔离级别 5.1
脏读不可重复读幻读可序列化(符合事务的四个特性的正常情况 ) 解释: 脏读:事务A对数据1做了更新,但是还没有来得及提交 此时事务B对数据1进行了查询获得了事务A更新后的数据, 但是事务A因为一些原因 ...
- android面试题之三
十一.对一些资源以及状态的操作保存,最好是保存在生命周期的哪个函数中进行? 若在onPause()中进行保存,相应需要在onResume()中进行恢复. 若在onStop()中进行保存,相应需要在on ...
- Android Testing(1) 浅尝Android测试的奥秘
------- 源自梦想.永远是你IT事业的好友.只是勇敢地说出我学到! ---------- 仅供学习和交流使用,翻译不好勿喷,请只摘除不合适的地方 Testing The Android fram ...
- 2013 ACM/ICPC 成都网络赛解题报告
第三题:HDU 4730 We Love MOE Girls 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4730 水题~~~ #include < ...
- Ext JS学习第五天 我们所熟悉的javascript(四)
此文用来记录学习笔记: •javascript之对象.面向对象 •可能对于高级语言你可能了解甚至精通OOP面向对象,那么对于javascript你又熟悉多少呢?我们一起来学习javascript面向对 ...
- UML 顺序图
顺序图 顺序图是交互图的一种形式,它显示对象沿生命线发展,对象之间随时间的交互表示为从源生命线指向目标生命线的消息.顺序图能很好地显示那些对象与其它那些对象通信,什么消息触发了这些通信,顺序图不能很好 ...