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语言入门课程》。
如有错漏之处,恳请指正。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。