乐趣区

关于c:C入门6C语言中的常量

Summary

1)常量是绝对于变量的一个概念;变量的值随时能够扭转,常量的值是不能够扭转的。

2)C 语言中的常量类型包含:

  • 字面量:间接示意值含意的符号,如:5, ‘a’, “Delphi”
  • 宏常量:通过 #define 定义,间接示意值的符号,如:#define FIVE 5
  • 枚举常量:通过 enum 定义,间接示意值的符号,如:First -> 1

3)C 语言中定义常量的形式:

  • 通过 #define 定义宏常量
  • 通过 enum 定义枚举常量

4)C 语言中定义常量的语法:

  • 宏常量:#define NAME Value

    • 示例 1:#define MyString”Bryson”
    • 示例 2:#define MyId 1
  • 枚举常量:#define NAME Value

    • 示例:
     enum
     {
      ThirdValue = 333,FourthValue = 444,}

5)常量的类型:

  • 字面量有默认类型,如“1”的默认类型为 int,”Hello world” 的类型为 const char*
  • #define定义的宏常量能够是 任意类型
  • enum定义的枚举常量只能 整形

6)C 语言中的只读变量

  • C 语言中提供了const 关键字,用于润饰一个变量
  • 被 const 润饰的变量只能作为 右值 应用

    • 无奈间接通过赋值操作符扭转 const 变量的值
    • const 润饰的变量并不是真正意义上的常量

C 语言中,const 润饰变量,看起来像常量,用起来像常量,但 实质是只读变量 。无奈间接扭转(通过 ”=” 进行赋值扭转),但能够间接扭转(用指针取到地址进行扭转)。再次留神, 实质是只读变量 ,占用内存的。
如下:

const int a = 1;

a = 2;    // error, assignment of read-only variable 'a'

int* p = (int*)&a;    // 取地址

*p = 2;               // 间接批改
printf("%d\n", a);    // 2

  • C 语言 中,gcc 编译器下,如上代码中 a 的值被批改为 2。阐明 const 定义了个只读变量。
  • C++ 语言 中,g++ 编译器下,如上代码 a 的值依然为 1。因为 C ++ 中 const 定义的是一个常量!a 被放到了 符号表 中。指针 p 批改的,实际上是内存中的一段空间,把那段空间的值批改为了 2,因而打印 a 的值为 1,* p 的值为 2。(详见后续 C ++)

本文总结自“狄泰软件学院”唐佐林老师《C 语言入门课程》。
如有错漏之处,恳请斧正。

退出移动版