08 常量

时间:2022-01-10 18:06:50

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 }

08 常量

 

 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,调试信息