const
定义的是变量,而define
定义的是常量。define
定义的宏在编译后就不存在了,它不占用内存,因为它不是变量,系统只会给变量分配内存。但const
定义的常变量本质上仍然是一个变量,具有变量的基本属性,有类型、占用存储单元。 可以说,常变量是有名字的不变量,而常量是没有名字的。
int *pi;
*pi被声明一个整型,可以推断出pi是一个普通的指向整型的指针。
int const *pci;
*pci被声明为一个整型常量,可以推断出pci是一个指向整型常量的指针。你可以修改指针的值,但不能修改它所指向的值。
int * const pci;
*const pci
被声明为整型,可以推断出pci被声明为一个指向整型的常量指针。此时指针的值无法修改,但可以修改它所指向的那个整型的值。
int const * const cpci;
* const cpci
被声明为一个整型常量,可以推断出cpci是一个指向整型常量的整型指针。无论是指针的值还是它所指向的值,都无法修改。
下面两个声明都为50这个值创建了名字常量。
#define MAX_ELEMENTS 50
int const max_elements = 50;
在这种情况下。使用#define
比使用const
变量好。因为只要允许使用字面值常量的地方都可以使用前者,比如声明数组的长度。const
变量只能用于使用变量的地方。