08 常量
1,常量是固定值,在程序执行期间不能改变,这些固定的值,又叫做字面量
2,常量可以是任何的基本数据类型,比如整数常量,浮点常量,字符常量,或字符串字面值,也有枚举常量
3,常量的值在定义之后不能进行修改
4,整数常量
①整数常量可以是十进制,八进制或十六进制的常量,前缀指定基数:0x或0X表示十六进制,0表示八进制,不带前缀则默认表示十进制。整数常量也可以带一个后缀,后缀是U和L的组合,U表示无符号整数(unsigned),L表示长整数(long)。后缀可以是大写,也可以是小写,U和L的顺序任意。
②整数常量举例说明
85 十进制
0213 八进制
0x4b 十六进制
30 整数
30u 无符号整数
30l 长整数
30ul 无符号长整数
5,浮点常量
①浮点常量由整数部分,小数点,小数部分和指数部分组成。可以使用小数形式或者指数形式来表示浮点常量
②浮点常量举例:
3.1415926 double常量
3.14159E-5 科学计数法
3.1f float常量
6,字符常量
①字符常量是括在单引号中的,例如,' x '可以存储在 char 类型的变量中,字符常量可以是一个普通的字符,也可以是一个转义序列(例如 ‘ \t ’)
②举例说明:
'X' 'A' 'b' '1' '\t'
7,字符串常量
①字符串字面值或常量是括在双引号中的,一个字符串包含类似于字符常量的字符,普通的字符,转义序列,和通用的字符,可以使用空格做分隔符,把一个很长的字符串常量进行分行
②举例
" hello world "
" 北京 "
" hello \
world "
1 #include<stdio.h> 2 void main() { 3 int n1 = 0213; //八进制 4 int n2 = 0X4b; //十六进制 5 char c1 = 'a'; 6 char c2 = '\t'; 7 char str1[20] = "北京 hello"; //"北京 hello"字符串常量 8 char str2[100] = "hello \ 9 world"; //等价 "hello world" 10 11 12 printf("n1=%d n2=%d str1=%s str2=%s", n1, n2, str1, str2); 13 }
8,常量的定义
①定义常量的两种方式:
使用 #define 预处理器
使用 const 关键字
②#define 预处理器
#define 预处理器定义常量的形式
#define 常量名 常量值
1 #include<stdio.h> 2 3 #define PI 3.14 //定义常量值 PI 常量值 3.14 4 int main() { 5 double area; 6 double r = 1.2; // 半径 7 area = PI * r * r; 8 printf("面积:%.2f", area); 9 return 0; //main函数前是 int ,需要返回值,所以为了符合语法,返回一个0 10 }
打印结果:
面积:4.52
③const 关键字
可以使用const 声明指定类型的常量
const 数据类型 常量名 = 常量值 ; // 即就是一个语句
1 #include<stdio.h> 2 3 const double PI = 3.14; //const定义常量时,需要加分号 4 int main() { 5 double area; 6 double r = 1.2; 7 area = PI * r * r; 8 printf("面积:%.2f", area); 9 }
打印结果:
面积:4.52
④const 和 #define 的区别
const 定义常量时,带类型,define 不带类型
const 是在编译,运行的时候起作用,而define 是在编译的预处理阶段起作用
define 只是简单的替换,没有类型检查,简单的字符串替换会导致边界效应
const 常量可以进行调试的,define 是不能进行调试的,主要是预编译阶段就已经替换掉了,调试的时候就没它了
const 不能重定义,不可以定义两个一样的,而define 通过 undef 取消某个符号的定义,再重新定义
define 可以配合 #ifdef #ifndef #endif 来使用,可以让代码更加灵活,比如我们可以通过 #define 来启动或者关闭 调试信息。
⑤易错举例
1 #include<stdio.h> 2 3 #define A 1 4 #define B A+3 5 void main() { 6 // define 就是一个简单的替换 7 double d1 = A / B * 3; 8 printf("d1=%.2f", d1); //10.00 9 10 分析: 11 d1=A/A+3*3=1+9=10 12 }
1 #include<stdio.h> 2 #define A 1 3 #define B (A+3) 4 void main() { 5 double d1 = A / B * 3; 6 printf("d1=%.2f", d1); //0.00 7 8 分析: 9 d1=A/(A+3)*3=1/4*3=0*3=0 10 }
若想得到 0.75 需要提升精度,令 A =1.0 即可
1 #include<studio.h> 2 #define DEBUG 3 void main() { 4 #ifdef DEBUG 5 printf("ok,调试信息"); 6 #endif 7 #ifndef DEBUG 8 printf("hello,另外的信息"); 9 #endif 10 }
打印结果:
ok,调试信息