二十一天学通C语言:使用const声明指针变量
本文节选自《21天学通C语言》一书

已经学习了使用限定词const声明变量可以带来很多好处。同样地,限定词const也可以用来声明指针变量。根据const关键字在声明中出现位置的不同,可以得到多种const指针类型,下面将依次进行讲解。为方便表述,以int型代表数据类型名,以p代表变量名。
1.指向const的指针变量
声明指向const的指针变量有以下两种方式:
int const *p
const int * p
由于变量声明中,const和数据类型名的出现次序可以随意排列,因此,以上两种声明表达式是等效的。以上的两个表达式将变量p都声明为指向存储const int型数据的内存空间的指针变量,该类指针指向的内存空间的内容是不可变的。例如,以下操作是错误的:
01    const int a = 1;
02    const int * p1 = &a;
03    
04    *p1 = 2;
第4行语句通过赋值表达式改变p1指向的内存空间的内容,而声明中p1指向的内容是不可改变的,因此,该语句是错误的。
2.const型指针变量
int * const p
该表达式声明了一个int型的const指针变量,即该指针变量的值是不可以改变的,也就是说const型指针变量指向的内存空间是固定的,初始化后不能将其指向其他空间。例如,以下操作是错误的:
01    int a = 1;
02    int b = 2;
03    int * const p = &a;
04    *p = 12;                                        /* 正确 */
05    p = &b;                                        /* 错误 */
第4行,对int型const指针变量指向的内存空间赋值是允许的;但是第5行,试图改变const指针变量p的值,将p指向变量b的内存空间,这是错误的,因为const指针的值是不可变的。
3.指向const的const指针变量
const int * const p
该表达式声明了一个指向存放const int型空间的const指针变量,该指针变量的值和该指针指向的空间的值都是不可改变的。以下行为是错误的:
01    int a = 1;
02    int b = 2;
03    int const * const p = &a;
04    *p = 12;                                     /* 错误 */
05    p = &b;                                        /* 错误 */
第4行,试图改变p指向的内存空间的内容,也就是p指向的变量a的值,这是错误的;第5行,试图改变p的值,也是错误的。该指针变量的值及其指向空间的值都是不可改变的。

二十一天学通C语言:使用const声明指针变量相关推荐

  1. C语言学习书籍推荐《学通C语言的24堂课》下载

    下载地址:点我 编辑推荐 <学通C语言的24堂课>: 用持续激励培养良好习惯以良好习惯铸就伟大梦想 --致亲爱的读者朋友 在开始学习<学通C语言的24堂课>的同时,强烈建议读者 ...

  2. 《21天学通C语言(第6版•修订版)》一导读

    前 言 21天学通C语言(第6版•修订版) 本书旨在引导读者在21天内学通C语言编程.虽然有来自诸如C++.Java和C#的激烈竞争,但很多初学编程者还是会选择C语言.正如第1天课程介绍的原因,选择C ...

  3. 《21天学通C语言(第7版)》一2.2 程序的组成部分

    本节书摘来自异步社区<21天学通C语言(第7版)>一书中的第2章,第2.2节,作者 [美]Bradley Jones , Peter Aitken , Dean Miller,更多章节内容 ...

  4. C语言为什么被const声明的变量不是一个常量表达式

    所谓常量表达式,就是在程序运行后,在任何情况下,都能保持不变的值. const声明的变量不具有这样的性质,比如: 如果有这样一个函数: int func(int m) {const int n = m ...

  5. ES6中使用let, const声明的变量, 在window对象下是获取不到的

    ES6中使用let, const声明的变量, 在window对象下是获取不到的 今天在写demo的时候发现, 使用let或者const声明的变量, 在window对象下使用this来获取发现获取不到 ...

  6. 21天学通c语言第四版pdf,21天学通Visual C++ PDF扫描版[116MB]

    21天学通Visual C++ 内容简介: 本书是Visual C++语言的入门教程,较全面地介绍了Visual C++编程的相关知识,然而,本书并没有泛讲Visual C++语言的所有知识,而是突出 ...

  7. 21天学通C语言-学习笔记(3)

    第三章 变量与常量 在C程序中,使用常量和变量两种形式来存储和表示数值.为了保存各种不同的数据,C语言定义了一系列的数据类型.本章将重点讨论常量和变量的使用方法.通过本章的学习,要重点掌握以下内容: ...

  8. const int *p说明不能修改_C语言关键字const和指针结合的使用

    C语言中,const 的作用是把变量变为一个只读的变量.与指针结合起来,有以下几种用法,下面分别进行说明. const int p; const int *p; int * const p; cons ...

  9. linux声明语言变量,C语言中用extern声明外部变量

    2. 在多文件的程序中声明外部变量 如果一个程序包含两个文件,在两个文件中都要用到同一个外部变量num,不能分别在两个文件中各自定义一个外部变量num.正确的做法是:在任一个文件中定义外部变量num, ...

  10. C语言学习之通过指针变量调用它所指向的函数

    通过指针变量调用它所指向的函数 int main(){int max(int,int);//函数声明int (*p)(int,int);//定义指向函数的指针变量pint a,b,c;p=max;// ...

最新文章

  1. linux/CentOS 6忘记root密码解决办法
  2. 视觉计算/深度学习/人工智能 笔试面试 汇总(腾讯、网易、yy、美图等)
  3. Yii游客允许查看页面设置
  4. 【经典回放】多种语言系列数据结构算法:串(C版)
  5. mrunit_使用MRUnit测试Hadoop程序
  6. filter过滤后重新添加_Spring Boot 2.X(十):自定义注册 Servlet、Filter、Listener
  7. 学习Linux——计算机概论
  8. onsubmit=“return check() 给form加onsubmit 验证所有表单后再提交,可以用返回false 来阻止submit提交
  9. 2018-10-20
  10. 工业机器人什么情况下会出现奇点_功夫机器人周全:复合作业机器人规模应用的奇点有多远?...
  11. idea中 google-java-format 插件的使用
  12. Json格式乱码处理方式
  13. 没有什么秘密的学习方法
  14. 2021年电工(初级)报名考试及电工(初级)考试资料
  15. python爬取B站动态的评论总数(不含用户评论内容详情)
  16. 微信小程序下拉框的实现功能
  17. opencv-python cv2
  18. form表单提交三种方式,demo实例详解
  19. java模板velocity,java模板引擎:velocity
  20. Android绘图之Canvas变换(6)

热门文章

  1. CentOS 常用命令及快捷键整理[转载]
  2. android错误详细教程四
  3. Python自学之乐-python中break continue exit() pass浅析
  4. JavaScript我学之七数组
  5. 时间序列的归一化方法
  6. [双调]落梅风(寿阳曲).焰火似龙
  7. mouseover与mouseenter、 mouseout与mouseleave的区别
  8. iphone开发常用编码
  9. matplotlib-legend 位置属性 loc 使用
  10. 【工大笔记】ACL20 如何使用选择机制提升自注意力网路能力?