当前位置: 首页 > article >正文

《C和指针》笔记2: const关键字

在C和C++中,常量的样子和变量完全一样,但是它们的值不能改变。可以使用const关键字来声明常量:

下面的声明都是可以的:

int const a;
const int a;

这两条语句都把a声明为一个整数。它的值不能发生改变。但是这样a的值无法改变。所以无法将任何东西赋值给它。如此以来,怎样才能让他一开始拥有一个值呢?有两种情况。

第一种,在声明的时候同时进行初始化。如下所示:

int const a = 15;

第二种,在函数中声明为const的形参,在函数被调用会得到实参的值。

当涉及指针变量时,有两样东西可能变成常量:指针变量和它所指向的实体。比如:

int *pi;

pi是一个普通的指向整型的指针。

如果加上const关键字可能有以下几种情况:

int const *pci;//指向整型常量的指针,指针的值可以修改,但不能改变它所指向的值。
int * const  cpi;//指向整型的常量指针。无法修改指针的值,但可以修改指针所指向的整型的值。
int const  * const  cpci;//指向整型常量的常量指针。指针的值和指针所指向的整型的值都不可以修改。

记忆方法:从左往右看。最靠近const左边是什么类型说明什么类型被指定为常量。

第一句int const *pci;最靠近const左边是int,指针指向的是int const类型,指针所指向的int const类型的值不能更改,但是指针的值可以修改。

第二句int * const cpi;最靠近const左边是int *, 指针是常量不能改,但是指针指向的整型的值可以改。

第三句int const * const cpci;就是把第一句和第二句的情况合并起来看的。

const用在哪里

当声明变量时,如果变量的值不会被修改,应当在声明中只用const的关键字。这种做法不仅使你的意图在其他阅读你的程序的人面前得到更清晰的展现,而且当这个值被意外修改时,编译器能够发现这个问题。

和#define的对比

#define指令是另一种创建名字常量的机制。下面两个声明都为50,这个值创建了名字常量:

#define MAX_ELEMENTS 50
int const max_elements = 50;

在这种情况下使用#define以使用const变量更好。因为只要允许使用字面值常量的地方都可以使用前者,比如声明数组的长度。const变量只能用于允许使用变量的地方。

摘录自:《C和指针》38-39


http://www.kler.cn/a/16099.html

相关文章:

  • 4. Spring Cloud Ribbon 实现“负载均衡”的详细配置说明
  • aws ses 设置发件人昵称
  • 数字孪生乡村:数字乡村智慧化营建思路
  • HarmonyOS Next星河版笔记--界面开发(5)
  • 两种鼠标hover切换对应图片方法对比
  • 【数据价值化】国有企业数据资产入表及估值实践指南:挖掘数字资产新价值
  • 当音乐遇上Python:用Pydub自动分割音频
  • leetcode 198.打家劫舍
  • 国民技术N32G430开发笔记(9)- IAP升级 Bootloader的制作
  • 【云原生|Docker】13-Docker-compose详解
  • 【flask】理解flask的几个难点,难啃的骨头,线程隔离啥的
  • 完成A轮融资,倍思如何发力场景化为品牌创造广阔未来?
  • cookie、localStorage和sessionStorage三者的区别
  • 小记Java调用C++开发的动态链接库(DLL)
  • 【JAVAEE】JAVA数据库连接(JDBC)
  • SAP重复制造入门到放弃系列之基本配置
  • vbscript+asp编写接口
  • 网络安全基础入门学习路线
  • Excel表格成绩排名全攻略,让你事半功倍!
  • Java 基础入门篇(二)—— Java 基础语法
  • 作为一名8年测试工程师,因为偷偷接私活被····
  • HR website
  • SOFA Weekly|SOFAArk 社区会议预告、Layotto 社区会议回顾、社区本周贡献
  • 操作系统——死锁
  • go破冰之旅·8·go函数基本实践及各种玩法
  • Jenkins 修改 root 权限问题