C入门6C语言中的常量

Posted bryson

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
  • 枚举常量:enum {...};

    • 示例:
     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语言入门课程》。
如有错漏之处,恳请指正。

以上是关于C入门6C语言中的常量的主要内容,如果未能解决你的问题,请参考以下文章

C语言:输入输出

初识C语言,教你读懂C语言,理清C语言脉络,真正入门C语言(函数数组操作符常见关键字#define定义常量和宏指针和结构体等相关内容)

C语言入门(基础一)

.NET番外篇Rust环境搭建+基础开发入门+Rust与.NET6C++的基础运算性能比较

C语言从入门到入土(入门篇P3)

请问c 语言中的 const 是啥意思?