4、常量

news/2025/3/17 21:36:51/文章来源:https://www.cnblogs.com/littlecc/p/18777732

常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。
常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串字面值,也有枚举常量。
常量就像是常规的变量,只不过常量的值在定义后不能进行修改。
常量可以直接在代码中使用,也可以通过定义常量来使用。

  • 整数常量

整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。
整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long)。后缀可以是大写,也可以是小写,U 和 L 的顺序任意。
下面列举几个整数常量的实例:

212         /* 合法的 */
215u        /* 合法的 */
0xFeeL      /* 合法的 */
078         /* 非法的:8 不是八进制的数字 */
032UU       /* 非法的:不能重复后缀 */// 以下是各种类型的整数常量的实例:
85         /* 十进制 */
0213       /* 八进制 */
0x4b       /* 十六进制 */
30         /* 整数 */
30u        /* 无符号整数 */
30l        /* 长整数 */
30ul       /* 无符号长整数 */// 整数常量可以带有一个后缀表示数据类型,例如:
int myInt = 10;
long myLong = 100000L;
unsigned int myUnsignedInt = 10U;
  • 浮点常量

浮点常量由整数部分、小数点、小数部分和指数部分组成。
当使用小数形式表示时,必须包含整数部分、小数部分,或同时包含两者。
当使用指数形式表示时, 必须包含小数点、指数,或同时包含两者。
带符号的指数是用 e 或 E 引入的。

3.14159       /* 合法的 */
314159E-5L    /* 合法的 */
510E          /* 非法的:不完整的指数 */
210f          /* 非法的:没有小数或指数 */
.e55          /* 非法的:缺少整数或分数 *///浮点数常量可以带有一个后缀表示数据类型,例如:
float myFloat = 3.14f;
double myDouble = 3.14159;
  • 字符常量

字符常量是括在单引号中,例如,'x' 可以存储在 char 类型的简单变量中。
字符常量可以是一个普通的字符(例如 'x')、一个转义序列(例如 '\t'),或一个通用的字符(例如 '\u02C0')。
在 C 中,有一些特定的字符,当它们前面有反斜杠时,它们就具有特殊的含义,被用来表示如换行符(\n)或制表符(\t)等。下表列出了一些这样的转义序列码:

// 下面的实例显示了一些转义序列字符:
#include <stdio.h>int main()
{printf("Hello\tWorld\n\n");return 0;
}// 字符常量的 ASCII 值可以通过强制类型转换转换为整数值。
char myChar = 'a';
int myAsciiValue = (int) myChar; // 将 myChar 转换为 ASCII 值 97
  • 字符串常量

字符串字面值或常量是括在双引号 " " 中的。一个字符串包含类似于字符常量的字符:普通的字符、转义序列和通用的字符。
可以使用空格做分隔符,把一个很长的字符串常量进行分行。
下面的实例显示了一些字符串常量。下面这三种形式所显示的字符串是相同的。

"hello, dear""hello, \dear""hello, " "d" "ear"// 字符串常量在内存中以 null 终止符 \0 结尾。例如:
char myString[] = "Hello, world!"; //系统对字符串常量自动加一个 '\0'
  • 定义常量

在 C 中,有两种简单的定义常量的方式:

使用 #define 预处理器: #define 可以在程序中定义一个常量,它在编译时会被替换为其对应的值。

使用 const 关键字:const 关键字用于声明一个只读变量,即该变量的值不能在程序运行时修改

  • #define 预处理器
    #define 常量名 常量值#define PI 3.14159
    

在程序中使用该常量时,编译器会将所有的 PI 替换为 3.14159。
具体请看下面的实例:

#include <stdio.h>#define LENGTH 10   
#define WIDTH  5
#define NEWLINE '\n'int main()
{int area;  area = LENGTH * WIDTH;printf("value of area : %d", area);printf("%c", NEWLINE);return 0;
}
  • const 关键字
const 数据类型 常量名 = 常量值;
const int MAX_VALUE = 100;

在程序中使用该常量时,其值将始终为100,并且不能被修改。

请注意,把常量定义为大写字母形式,是一个很好的编程习惯。

  • define 与 const 区别

#define 与 const 这两种方式都可以用来定义常量,选择哪种方式取决于具体的需求和编程习惯。通常情况下,建议使用 const 关键字来定义常量,因为它具有类型检查和作用域的优势,而 #define 仅进行简单的文本替换,可能会导致一些意外的问题。

#define 预处理指令和 const 关键字在定义常量时有一些区别:

替换机制:#define 是进行简单的文本替换,而 const 是声明一个具有类型的常量。#define 定义的常量在编译时会被直接替换为其对应的值,而 const 定义的常量在程序运行时会分配内存,并且具有类型信息。

类型检查:#define 不进行类型检查,因为它只是进行简单的文本替换。而 const 定义的常量具有类型信息,编译器可以对其进行类型检查。这可以帮助捕获一些潜在的类型错误。

作用域:#define 定义的常量没有作用域限制,它在定义之后的整个代码中都有效。而 const 定义的常量具有块级作用域,只在其定义所在的作用域内有效。

调试和符号表:使用 #define 定义的常量在符号表中不会有相应的条目,因为它只是进行文本替换。而使用 const 定义的常量会在符号表中有相应的条目,有助于调试和可读性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/900596.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【视频讲解】R语言逐步回归模型对电影票房、放映场数、观影人数预测可视化

全文链接:https://tecdat.cn/?p=34335 原文出处:拓端数据部落公众号 分析师:Junjie Tan讲解|R语言回归模型分析电影票房影响因素本文通过利用回归模型帮助客户对电影的票房数据(以及放映场数,观影人数)进行了研究,确定了决定电影的票房的重要因素。并讲述、论证了预测电…

实现使用vue3完成后台管理系统的基础页面搭建

<template><div><!-- 头部开始 --><div style="height: 60px; background-color: #8686e0; display: flex; align-items: center"><div style="width: 200px; display: flex; align-items: center; padding-left: 15px"><…

pytthon的基本运用(8)——模块

一、模块的介绍 (1)python模块,是一个python文件,以一个.py文件,包含了python对象定义和pyhton语句 (2)python对象定义和python语句 (3)模块让你能够有逻辑地组织你的python代码段。 (4)把相关的代码分配到一个模块里能让你的代码更好用,更易懂 (5)模块能定义函数…

服务器跑实验

项目名称——基于机器学习与深度学习的贷款批准预测 项目来源:和鲸社区https://www.heywhale.com/mw/project/670f61d10ebb9f7a69c5144c 项目数据集:有两个【上传不了博客】大概长这个样:数据说明:实验环境:tensorflow、shap 实验结果:实验过程以及遇到的问题和解决方案:…

工作面试必备:SQL 中的各种连接 JOIN 的区别总结!

前言 尽管大多数开发者在日常工作中经常用到Join操作,如Inner Join、Left Join、Right Join等,但在面对特定查询需求时,选择哪种Join类型以及如何使用On和Where子句往往成为一大挑战。特别是对于初学者而言,这些概念可能显得抽象且难以区分。在实际应用中,错误地使用Join类…

攻防世界 hello_pwn WriteUp

WriteUp 题目信息 来源:攻防世界 名称:hello_pwn 分类:Pwn 描述:pwn!,segment fault!菜鸡陷入了深思题目链接: https://adworld.xctf.org.cn/challenges/list解题思路 首先使用DIE对文件进行查壳,发现这是一个无壳的64位ELF文件,所以使用64位IDA对该文件进行反汇编。接…

《95%开发者不知道的vue.config.js高阶玩法》手撕Webpack配置链/SSR优化/多页应用,3倍构建效率实战方案

Vue工程化配置指南:vue.config.js深度解析 一、初始化配置文件 在Vue CLI工程根路径下创建配置文件: 项目层级示意: your-project/ ├── src/ ├── public/ ├── package.json └── vue.config.js # 新增配置文件基本模板结构: module.exports = {// 工程化配置区…

ElevenLabs 33 亿美元估值的秘密:技术驱动+用户导向的「小熊软糖」团队丨Voice Agent 学习笔记

图:Emmanuel Ashun / Endeavor大家好,这是 Voice Agent 学习笔记系列的第 23 篇,我是课代表十三🧑‍💻。ElevenLabs 是一家专注于人工智能语音技术的创新公司,致力于重新定义音频体验。凭借其突破性的语音克隆和配音工具,ElevenLabs 正在重塑音频内容创作的未来,让高…

分布式服务幂等性问题如何解决

在分布式系统中解决幂等性问题是保证系统健壮性的关键挑战之一。以下从原理到实践的完整解决方案,涵盖7种核心模式及落地实现细节:一、幂等性问题本质 核心定义:相同请求多次执行对系统状态的影响 = 执行一次的结果 产生场景:网络抖动导致客户端重复提交 服务端超时后重试机…

一图看懂|2025年经济社会发展10大主要任务

一图看懂|2025年经济社会发展10大主要任务

新朋友:线段树

目录认识线段树和他的梦想 实现梦想之有个小身板 实现梦想之一点一点查 实现梦想之一点一点变 实现梦想之一坨一坨查 实现梦想之一坨一坨变 实现梦想之…不,没能力帮你了1. 认识线段树和他的梦想 差分想必大家都认识,它是可以进行区间加与区间减,但是要查询某个区间的和。他…

攻防世界 get_shell WriteUp

WriteUp 题目信息 来源:攻防世界 名称:get_shell 分类:Pwn 描述:运行就能拿到shell呢,真的题目链接: https://adworld.xctf.org.cn/challenges/list解题思路 首先使用DIE对文件进行查壳,发现这是一个64位ELF文件,所以选择使用64位IDA对文件进行反汇编。发现可以直接运行…