光天化日学C语言(08)- 常量 | 泰山崩于前而面不改色

一、前言

  本文作者是从 2007 年开始学 C语言 的,不久又接触了C++,基本就是 C/C++ 技术栈写了 14 年的样子,不算精通,但也算差强人意。著有《夜深人静写算法》系列,且承诺会持续更新,直到所有算法都学完。主要专攻 高中 OI 、大学 ACM、 职场 LeetCode 的全领域算法。由于文章中采用 C/C++ 的语法,于是就有不少读者朋友反馈语言层面就被劝退了,更何况是算法。
  于是,2021 年 06 月 12 日,《光天化日学C语言》 应运而生。并且作者在此承诺,这个系列全部文章均免费且开源,主要服务于高中生、大学生以及职场上想入坑C语言的志同道合之人,希望能给祖国引入更多编程方面的人才,并且让自己的青春不留遗憾!
  今天要讲的内容是常量,和变量相对,常量就是不变的量。

二、人物简介

  • 第一位登场的就是今后会一直教我们C语言的老师 —— 光天。
  • 第二位登场的则是今后会和大家一起学习C语言的没什么资质的小白程序猿 —— 化日。
    在这里插入图片描述

三、常量简介

  • C语言中的常量,主要分为以下几种类型:

四、数值常量

  • 数值常量分为整数和浮点数,整数一般称为整型常量,浮点数则称为实型常量。

1、整型常量

  • 整型常量分为二进制、八进制、十进制 和 十六进制。
  • 每个整型常量分为三部分:前缀部分、数字部分、后缀部分。
  • 如下表所示:
  • 关于前缀这部分,在 光天化日学C语言(06)- 进制转换入门 已经讲到过,就不再累述了。
  • 这里着重提一下后缀,uunsigned)代表无符号整数,llong)代表长整型,ll代表long long

  • 换言之,无符号整型就是非负整数。
  • 待时机成熟,我会对整数的存储结构进行一个非常详细的介绍。

【例题1】说出以下整型常量中,哪些是非法的,为什么非法。

1314
520u
0xFoooooL
0XFeeeul
018888
0987UU
0520
0x4b
1024llul
30ll
030ul

2、实型常量

  • 实型常量又分为 小数形式 和 指数形式。

1)小数形式

  • 小数形式由三部分组成:整数部分、小数点、小数部分。例如:
	3.1415927
	4.5f
	.1314
  • 其中 f后缀代表 float,用于区分double
  • .1314等价于0.1314

2)指数形式

  • 指数形式的典型格式为xey,如下:
	1e9
	5.2e000000
	5.2e-1
	1.1e2
  • 它表示的数值是:
  • x × 1 0 y x \times 10^{y}

  • 其中 y y 代表的是数字10的指数部分,所以是支持负数的。

五、字符常量

  • 字符常量可以是一个普通的字符、一个转义序列,或一个通用的字符。
  • 每个字符都对应一个 ASCII 码值。

1)普通字符

  • 普通字符就是用单引号括引起来的单个字符,如下:
	'a'
	'Q'
	'8'
	'?'
	'+'
	' '

2)转义字符

  • 转义字符是用引号引起来,并且内容为 斜杠 + 字符,例如我们之前遇到的用 '\n'代表换行,\t代表水平制表符(可理解为键盘上的 tab 键),'\\'代表一个反斜杠,等等;
  • 当然还可以用 '\ooo'来代替一个字符,其中一个数字o代表一个八进制数;也可以用 '\xhh'来代表一个字符,具体见如下代码:
#include <stdio.h>
int main() {
    char a = 65;
    char b = '\101';
    char c = '\x41';
    printf("%c %c %c\n", a, b, c);
    return 0;
} 

  • 以上的代码输出结果为:
A A A
  • 这是因为八进制下的101和十六进制的41在十进制下都是65,代表的是大写字母'A'的ASCII 码值。

【例题1】请问如何输出一个单引号?

六、字符串常量

  • 字符串常量,又称为字符串字面值,是括在双引号""中的。一个字符串包含类似于字符常量的字符:普通字符、转义序列。

1、单个字符串常量

#include <stdio.h>
int main() {
    printf( "光天化日学\x43语言!\n" );
    return 0;
} 
  • 我们可以用转义的'\x43'代表'C'和其它字符组合,变成一个字符串常量。以上代码输出为:
光天化日学C语言!

【例题2】如果我想要如下输出结果,请问,代码要怎么写?

"光天化日学C语言!"

2、字符串常量分行

  • 两个用""引起来的字符串,是可以无缝连接的,如下代码:
#include <stdio.h>
int main() {
	printf( 
		"光天化日学" 
		"C语言!\n" 
	);
	return 0;
} 
  • 这段代码的结果也是:
光天化日学C语言!

七、符号常量

1、#define

  • 利用 #define预处理器可以定义一个常量如下:
#include <stdio.h>
#define TIPS "光天化日学\x43语言!\n" 
#define love 1314
int main() {
    printf( TIPS );
    printf("%d\n", love);
    return 0;
} 
  • 以上这段代码,会将所有TIPS都原文替换为"光天化日学\x43语言!\n";将所有love替换为1314

2、const

  • const的用法也非常广泛,而且涉及到很多概念,这里只介绍最简单的用法,后面会开辟一个新的章节专门来讲它的用法。
#include <stdio.h> 
const int love = 1314;
int main() {
	printf( "%d\n", love );
	return 0;
}
  • 我们可以在普通变量定义前加上const,这样就代表它是个常量了,在整个运行过程中都不能被修改。

【例题3】下面这段代码会发生什么情况,自己编程试一下吧。

#include <stdio.h> 
const int love = 1314;
int main() {
    love = 520;
    printf( "%d\n", love );
    return 0;
}

  • 通过这一章,我们学会了 各种类型 的常量,希望对你有帮助哦 ~ 祝大家早日成为 C 语言大神!

(https://blog.csdn.net/whereisherofrom/category_11115622.html)

(完)