0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

技术干货驿站 ▏深入理解C语言:掌握常量,让你的代码更加稳固高效!

北京合众恒跃科技有限公司 2024-08-29 13:59 次阅读

C语言的世界中,常量是一种不可忽视的元素。无论你是在编写简单的代码,还是构建复杂的系统,常量都能为你的程序带来更高的稳定性和可靠性。在这篇文章中,我们将深入探讨C语言中的常量,从整数常量到字符串常量,逐一解析它们的使用方法和特点,帮助你在编程中更加得心应手。

01

常量

常量是固定值,在程序执行期间不会改变。这些固定的值,又叫做字面量。

常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串常量,也有枚举常量。

常量就像是常规的变量,只不过常量的值在定义后不能进行修改,常量可以直接在代码中使用,也可以通过定义常量来使用。

02

整数常量

整数常量可以是十进制、八进制或十六进制。前缀用来指定基数,0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。

整数常量也可以带一个后缀,后缀可以是U或者L,不区分大小写,也无顺序要求,U 表示无符号整数(unsigned),L 表示长整数(long)。

以下是几个示例:

cef1252a-65cb-11ef-9e9e-92fbcf53809c.pngcf0037b8-65cb-11ef-9e9e-92fbcf53809c.png

03

浮点常量

浮点常量由整数部分、小数点、小数部分和指数部分组成。可以使用小数形式或者指数形式来表示浮点常量。

当使用小数形式表示时,必须同时包含整数部分和小数部分。当使用指数形式表示时, 必须同时包含小数点和指数。带符号的指数是用 e 或 E 引入的。

以下是几个示例:

cf1e2f0c-65cb-11ef-9e9e-92fbcf53809c.png

04

字符常量

字符常量是括在单引号中,例如,'x' 可以存储在 char 类型的简单变量中。

字符常量可以是一个普通的字符(例如 'x')、一个转义序列(例如 '\t'),或一个通用的字符(例如 '\u02C0')。

在 C 中,有一些特定的字符,当它们前面有反斜杠时,它们就具有特殊的含义,被用来表示如换行符(\n)或制表符(\t)等。大家可以自行搜索 “转义字符” 来查看,这里举例常见的换行符\n:

cf471db8-65cb-11ef-9e9e-92fbcf53809c.png

这是一个简单的C语言程序,编译运行后结果如下:

cf50bef4-65cb-11ef-9e9e-92fbcf53809c.png

可以看到,这里的hello world 和命令行在同一行内,不方便查看。我们添加两个换行符进去:

cf63f0aa-65cb-11ef-9e9e-92fbcf53809c.png

\n 表示在这一行的末尾位置换行,我们编译运行这个程序来看一下效果:

cf73d218-65cb-11ef-9e9e-92fbcf53809c.png

可以看到,由于添加了两个换行符,每一个词都做了换行处理,方便查看。

05

字符串常量

字符串常量是括在双引号 " " 中的。一个字符串包含类似于字符常量的字符:普通的字符、转义序列和通用的字符。

可以使用空格做分隔符,把一个很长的字符串常量进行分行。

06

定义常量

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

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

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

下面我们通过实例来看一下两种方式的不同。

01 / #define预处理器

cfaaa6f8-65cb-11ef-9e9e-92fbcf53809c.png

编译运行结果如下:

cfba137c-65cb-11ef-9e9e-92fbcf53809c.png

02/const关键字

cfc3b738-65cb-11ef-9e9e-92fbcf53809c.png

编译运行结果如下:

cfd827c2-65cb-11ef-9e9e-92fbcf53809c.png

03 /#define 与 const 的区别

#define 是预处理器在预处理阶段完成的,而 const 是在编译器开始编译程序阶段完成的。

#define 是宏定义,其特点是简单的原位替换。它定义的常量值没有类型限定,也不进行类型检查,只是在出现宏名称的地方直接展开;const 是关键字,本质上定义了一个只读变量,不可更改。编译时会检查常量值的类型是否匹配。

#define 适用于简单的文本替换,例如常量表达式、宏定义和条件编译等场景;使用 const 更适合定义具有类型和作用域的常量,它具有类型安全性,可以进行类型检查,并且在内存中分配存储空间。

在 C 语言中,推荐使用 const 来定义常量,以提供更好的类型检查和代码可读性。

04 /#define 与 const 的优点

const的优点

const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误。


有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试。


const可节省空间,避免不必要的内存分配,提高效率。

#define的优点

宏可以定义一些函数,const不可以;宏可以使代更码简洁;使用宏可以方便代码维护;宏还可以定义带参数的宏,做到一定程度的泛型(利用#或者##操作符)。

总结

通过对C语言中常量的深入了解和运用,你可以显著提升代码的稳定性和可读性。常量在确保程序行为一致性的同时,也为代码的优化提供了有力支持。合理使用不同类型的常量,以及#define和const的结合,将为你的编程工作奠定坚实的基础。在日后的开发中,充分利用这些工具,将使你的代码更加高效可靠。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7574

    浏览量

    133812
  • 程序
    +关注

    关注

    115

    文章

    3719

    浏览量

    80332
  • 代码
    +关注

    关注

    30

    文章

    4665

    浏览量

    67731
收藏 人收藏

    评论

    相关推荐

    技术干货驿站深入理解C语言:基本数据类型和变量

    C语言中,数据类型和变量是编程的基础,也是理解更复杂概念的关键。数据类型决定了变量的内存分配、存储范围和操作方式,而变量则是存储数据的容器。本篇文章将从基本数据类型和变量两个方面,带你深入
    的头像 发表于 07-26 17:53 1603次阅读
    <b class='flag-5'>技术</b><b class='flag-5'>干货</b><b class='flag-5'>驿站</b> ▏<b class='flag-5'>深入理解</b><b class='flag-5'>C</b><b class='flag-5'>语言</b>:基本数据类型和变量

    技术干货驿站深入理解C语言掌握程序结构知识

    在计算机编程的世界中,C语言被广泛认可为一门强大而高效的编程语言,其简洁的语法和直接的指令使得它成为了许多程序员的首选。了解C
    的头像 发表于 07-27 08:45 836次阅读
    <b class='flag-5'>技术</b><b class='flag-5'>干货</b><b class='flag-5'>驿站</b> ▏<b class='flag-5'>深入理解</b><b class='flag-5'>C</b><b class='flag-5'>语言</b>:<b class='flag-5'>掌握</b>程序结构知识

    深入理解Android

    深入理解Android
    发表于 08-20 15:30

    深入理解和实现RTOS_连载

    了解和掌握RTOS的多任务机制。深入理解和实现RTOS_连载4_多任务机制实现本篇将详细介绍TROCHILI RTOS 多任务机制的实现,内容很详细、很丰富,涉及了大量RTOS底层实现。建议读者参考实际代码
    发表于 05-29 11:20

    深入理解和实现RTOS_连载

    连载的几篇则会通过流程图、代码演示的方式仔细讲解飞鸟RTOS的多任务机制的实现和应用。按照原理、设计、实现、应用的思路,带领读者逐步深入了解和掌握RTOS的多任务机制。深入理解和实现R
    发表于 05-30 01:02

    深入理解C语言比较有用的几个资料

    这里有三个对深入理解C语言的资料,觉得不错,分享一下
    发表于 08-07 21:37

    51单片机C语言讲义(谭浩强)以及深入理解C指针

    本帖最后由 发烧友之麒麟 于 2014-10-6 09:19 编辑 C语言讲义(谭浩强)及深入理解C指针,自己在用的资料,觉得写得挺好的就拿出来分享,需要的请回[attach]2
    发表于 10-02 17:05

    深入理解Linux网络技术内幕》(EN)

    深入理解Linux网络技术内幕》(EN)
    发表于 02-06 15:17

    如何更加深入理解MOSFET开关损耗?

    如何更加深入理解MOSFET开关损耗?Coss产生开关损耗与对开关过程有什么影响?
    发表于 04-07 06:01

    对栈的深入理解

    为什么要深入理解栈?做C语言开发如果栈设置不合理或者使用不对,栈就会溢出,溢出就会遇到无法预测乱飞现象。所以对栈的深入理解是非常重要的。注:动画如果看不清楚可以电脑看更清晰啥是栈先来看
    发表于 02-15 07:01

    为什么要深入理解

    [导读] 从这篇文章开始,将会不定期更新关于嵌入式C语言编程相关的个人认为比较重要的知识点,或者踩过的坑。为什么要深入理解栈?做C语言开发如
    发表于 02-15 06:09

    深入理解Android:卷I》

    深入理解Android:卷I》
    发表于 03-19 11:23 0次下载

    深入理解C指针(C/C++程序员进阶必备,透彻理解指针与内存管理)pdf

    深入理解C指针
    发表于 03-21 09:42 118次下载

    如何更加深入理解I2C总线、协议及应用

    更加深入理解I2C总线、协议及应用
    的头像 发表于 03-20 09:29 3205次阅读
    如何<b class='flag-5'>更加深入理解</b>I2<b class='flag-5'>C</b>总线、协议及应用

    STM32编程:是时候深入理解栈了<一>

    为什么要深入理解栈?做C语言开发如果栈设置不合理或者使用不对,栈就会溢出,溢出就会遇到无法预测乱飞现象。所以对栈的深入理解是非常...
    发表于 01-26 17:55 2次下载
    STM32编程:是时候<b class='flag-5'>深入理解</b>栈了<一>