文章目录
常量
C语言中的常见的常量
- 数值常量(整型常量,实型常量-> 小数形式和指数形式)
- 字符常量(普通字符,转义字符)
- 字符串常量
- 符号常量(#define const)
1. 数值常量
整型常量
- 整型常量分为二进制,八进制,十进制和十六进制
- 每个整型常量分为三部分: 前缀部分,数字部分,后缀部分.
进制 | 前缀部分 | 数字部分 | 后缀部分 |
---|---|---|---|
二进制 | ob | 0~1 | u,l,ll |
八进制 | 0 | 0-7 | u,l,ll |
十进制 | 无 | 0-9 | ‘u,l,ll’ |
十六进制 | ox 或0X | 0-9 ,a-f ,A-F | u,l,ll |
- 后缀的即使
u (unsigned)
代表无符号的整数l(long)
代表长整型,ll
代表long long
长长整型
#include <stdio.h>
int main()
{
int a = 0b10101u; // 无符号二进制数
long b = 0123l; // 8进制长整型,后面那个是小写的L,不是1,注意这里.
long long c = 0x123Fll; // 16进制长整型
printf("a = %d, b = %lo, c= %llx",a,b,c); // 按照对应的占位符进行打印
return 0;
}
结果:
实型常量
- 实型常量又分为小数形式 和 指数形式
1. 小数形式
小数形式分为三个部分: 整数部分,小数点,小数部分.
例如:3.1415927,4.5f,.1314
其中f
后缀代表float
,用于区分double
.1314
等价于0.1314
2. 指数形式
- 指数形式的典型格式为xey
1e9,5.2e00000,5.2e-1,1.1e2
,表示的数值是x * 10^y
字符常量
- 字符常量可以是一个普通的字符,一个转义序列,或者是一个通用的字符.
- 每个字符都对应一个ASCII码值
1. 普通字符
普通字符就是用单引号括引起来的单个字符
2. 转义字符
- 转义字符是用引号引起来,并且内容为斜杠+字符,例如
\n
代表换行,\t
代表制表符(可以理解为键盘上的tab键),\\
代表一个反斜杠,等等.\number
来代替一个字符,其中一个数字number代表一个八进制数,也可以用\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;
}
结果:
字符串常量
1. 单个字符串常量
- 字符串常量中允许有转义字符
- 字符串常量使用"" 双引号引起来
#include <stdio.h>
int main()
{
char str[100] = "我要好好学习\x43语言!";
printf("%s", str);
return 0;
}
结果:
符号常量
1. #define
利用
#define
预处理器可以定义一个常量如下:
#include <stdio.h>
#define FIOMAN "Love Hammer,Love Running!\n"
#define Hammer "Love Fioman \n"
int main()
{
printf(FIOMAN);
printf("%s",Hammer);
return 0;
}
结果:
#define 就是一个预处理替换,会将代码中所有的被define定义的文本替换为后面的文本
2. const
一个变量前面加上
const
,就表示这个变量是常量,在整个运行过程中都不能被修改
C语言中既然已经有了#define,为什么还需要const呢
原因有三点
- 预编译指令只是对值进行简单的替换,不能进行类型检查
- 可以保护被修饰的东西,防止意外修改,增强程序的健壮性
- 编译器通常不为普通的const常量分配存储空间,而是将它们保存在符号表中,这使得它成为一个编译期间的一个常量,没有了存储与读内存的操作,增加效率