对于一个普通指针typet *p。p有三个最基本的能力,第一就是可以通过p = &obj来指向一个type类型对象,并随意切换指向对象。第二就是通过value = *p来读取它指向的对象的值。第三个就是通过*p = value来修改它指向的对象的值。

在普通指针上加const,根据const位置的不同,会得到一些特殊的指针。相对于普通指针,它们丧失了一些能力,可以算是阉割版的指针。

(1)在type前面加const,得到const type *p。这种指针失去了修改指向对象的值的能力,即不能通过*p = value去改变对象的值。

这种指针有什么用呢?在C语言中,参数的传递总是采用值传递,这种方式在传递一些内置的数据类型时,效率没有太大影响,但是在传递复杂的结构体时,值传递的方式由于要进行复制操作,程序效率就会受到比较大的影响,这时候传递指针效率就高多了。但是传递普通指针的话,人们又担心会在不需要修改实参的值的情况下,不小心修改了实参的值,所以总是要小心翼翼。自从有了const type *p这种指针,由于它失去了修改对象的值的能力,所以人们对它就放心了。以后,再需要传递指针提高程序性能,又不想改变实参的时候,我们就用const type *p。

容易想到,还有一种情况也需要用const type *p,那就是指向const对象时,必须用const type *p。

(2)在p的前面加const,得到type* const p。这种指针则失去了随意切换指向对象的能力,即不能通过p = &obj来随时改变它指向的对象。所以这种指针从一开始定义就要初始化它的指向,以后再也不能更改,即必须从一而终。但通过它对指向的对象进行读写操作都是没问题的。如果不希望p的指向发生改变,就可以用这种指针。

(3)如果在type前面和p前面都加上const,就得到const type* const p。这种指针只能指向固定的对象,并且只能读取而不能修改对象的值。

C语言学习日记

const 指针_C语言学习日记(11)——const与指针相关推荐

  1. 语言余一个负数_C语言学习日记(8)——整数溢出

    小时候喜欢玩电子计算器,觉得很神奇,想要算什么数,立刻就能算出来.当时看着计算器的液晶屏幕就想,如果算一个很大的数,超过了屏幕上面数字的位数,会怎么样呢?试了以后结果是INF,那就是无穷大了.虽然当时 ...

  2. c语言代码表白_C语言学习日记(9)——用C语言写一个爱心吧

    总羡慕别人的勇气,喜欢一个人就大胆表白.玫瑰和蜡烛围成的美丽的心形,就像此时主角的内心,浪漫而又炽热,不管成功与否,都一样美好. 爱的符号 而像小猫这种不善于表达的人,平时除了埋头看书,看上去好像没有 ...

  3. sdh管理单元指针_C语言学习|指针的介绍

    指针是C语言提供的一种特殊而又有非常重要的数据类型. 联合使用指针和结构体这两种数据类型可以有效地表示许多复杂的数据结构,如队列.堆栈.链表.树.图等. 指针这个内容为什么那么的重要? 1.指针为函数 ...

  4. c++ 指针_C/C++学习笔记——C提高:指针强化

    指针是一种数据类型 指针变量 指针是一种数据类型,占用内存空间,用来保存内存地址. void test01(){ int* p1 = 0x1234; int*** p2 = 0x1111; print ...

  5. c语言谭浩强ppt课件,编程_C语言学习课件_谭浩强_PPT~1216F.ppt

    编程_C语言学习课件_谭浩强_PPT~1216F.ppt ,第一章,C语言概述本章要点,C语言的特点 C程序的结构 在计算机上运行C程序的方法主要内容,1.1 语言出现的历史背景 1.2 程序的特点 ...

  6. c语言实训自我总结报告日记,C语言学习日记(1)-准备好工具

    小猫开始学习C语言啦,首先选个喜欢的工具吧.C语言开发工具真多啊,什么C-Free,Code Lite,Code::Blocks,DevC++,VisualStudio,CLion等,这些工具里面Vi ...

  7. C语言学习日记(11)——const与指针

    对于一个普通指针typet *p.p有三个最基本的能力,第一就是可以通过p = &obj来指向一个type类型对象,并随意切换指向对象.第二就是通过value = *p来读取它指向的对象的值. ...

  8. int转char数组_C语言学习第22篇---数组和指针的关系剖析

    数组的本质: 数组是一段连续的内存空间 数组的空间大小为sizeof(array_type)*array_size 数组名可以看做指向数组的第一个元素的常量指针(只是理解,其实是错的,参见<征服 ...

  9. c语言笔记照片_C语言学习笔记

    一般情况下,在C语言中,函数指针定义时就会说明其指向的函数的参数情况以及返回值类型,比如以下定义: void (*func_p)(int a); 以上代码就声明了一个函数指针func_p,其指向的函数 ...

最新文章

  1. vue 模板_简化版的 vue 页面模板语法
  2. 《Android程序设计》一第一部分 工具和基础
  3. Mongodb-初步了解
  4. 厦门大学2016年高等代数考研试题参考解答
  5. input组件未在Form内,清空输入数据
  6. [python] redis 模块 -- 实现 python 与 Redis 数据库的结合
  7. 嵌入式WiFi芯片价格战已经打响 MCU企业该醒悟了
  8. React开发(141):react中ref为class添加ref
  9. java制作风车图像的main方法_创意图形的绘制 会转的风车
  10. 如何估算网站日承受最大访问PV
  11. Javascript特效:表单选中、取消选中、反选
  12. Linux中文档与目录的特殊权限
  13. 学JS必读,《JavaScript高级程序设计(第3版)》
  14. 这届打工人,回家过年都这么难
  15. 大学计算机应用基础教程读后感,计算机应用基础的课程学习体会
  16. Bumped!(dijskra)
  17. Android中关于涉及到金钱计算方面的工具类!
  18. Enigma密码机初级解析
  19. linux之域名更改
  20. 命令行发送SMTP协议邮件(163邮箱)

热门文章

  1. 2017二级计算机考试题,2017计算机二级考试MSOffice真题练习及答案
  2. 2018年三月份计算机一级考试试题,2018年3月计算机一级考试MSOFFICE模拟试题(4)
  3. php socket 实现ftp,用socket实现FTP教程
  4. 设计模式笔记十二:享元模式 | 更新版
  5. DeePMD-kit的conda安装方法以及速度慢的解决方案
  6. Linux终端常用快捷键总结
  7. android 关闭软键盘_实现边到边的体验 | 让您的软键盘动起来 (一)
  8. note_maven的概念,作用
  9. ES6_对象简洁语法_note
  10. easyui修改css样式,修改easyui的easyloader的默认css目录路径