C 常量


常量指固定不变的值。程序执行过程不会改变常量的值。这些值也称为字面量(literal)。


下面是几种数据类型的常量表示:

  • int常量,使用整数数字表示,例如25。数字加后缀u或U表示无符号int常量,例如25u或25U。可以在整型(int或long)前加前缀0使用八进制表示整型常量,例如025。也可以在整型(int或long)前加前缀使用十六进制表示整型常量,例如0x25或0X25。
  • long常量,使用数字后面跟l或L表示,例如8000L。8000ul或8000UL无符号long。
  • double常量,使用带小数点的数字或指数方式表示,例如12.6或1.5e3或1.5E-2表示。
  • float常量,使用带小数点的数字或指数方式后面跟f或F表示,例如1.25f或1.25F。
  • character常量,使用一个字符前后加单引号表示,例如'a'。character常量也是一个整数,值为字符集中对应字符的数值,例如'a'的值为97。
  • string常量,使用0或多个字符前后加双引号表示,例如“apple”。string常量内部实现是一个以空字符'\0'结尾的字符数组。

下面是常量的例子:

#include <stdio.h>
int main(int argc, const char * argv[]) {
    int i = 25;
    int i2 = 0x25;

    long l = 25L;
    long l2 = 025l;

    float f = 1.2f;
    double d = 1.5e3;

    char c = 'a';
    char c2 = 65;

    char *p = "dog likes bone";
    printf("i : %d, i2 : %d \n", i, i2);    // i : 25, i2 : 37
    printf("l : %ld, l2 : %ld \n", l, l2);  // l : 25, l2 : 21
    printf("f : %f, d : %f \n", f, d);      // f : 1.200000, d : 1500.000000
    printf("c : %c, c2 : %c \n", c, c2);    // c : a, c2 : A
    printf("str : %s \n", p);   // dog likes bon

    return 0;
}


C中有3种方式定义常量:

  • 使用#define预编译指令定义一个符号常量(Symbolic Constant)的方式。
  • 使用枚举常量(Enumeration constant)定义。
  • 使用const关键字方式定义常量。

符号常量

通过#define 符号常量名 替换内容来定义一个符号常量(Symbolic Constant)。程序编译时源码中的所有符号常量名的地方被替换为替换内容

下面是符号常量的例子:

#include <stdio.h>
#define COUNT 5

int main(int argc, const char * argv[]) {
    printf("COUNT : %d \n", COUNT); // 5
    for (int i = 0; i < COUNT; i++)
        printf("%d ", i);   // 0 1 2 3 4 

    return 0;
}

枚举常量

枚举常量(Enumeration constant)是常量整数的列表。枚举常量用于将名字和常量值关联起来。

定义一个枚举常量enum fruit {APPLE, BANANA, PEAR, ORANGE, LEMON},enum fruit中第一个名字APPLE的值为0,第二个BANANA的值为1,后面的依次增加1。如果显示指定PEAR的值为5,则后面ORANGE和LEMON的值则还是相对PEAR的值依次加1。

下面是枚举常量的例子:

#include <stdio.h>
int main(int argc, const char * argv[]) {
    enum fruit {APPLE, BANANA, PEAR = 5, ORANGE, LEMON};

    printf("APPLE : %d \n", APPLE);   // 0
    printf("BANANA : %d \n", BANANA); // 1
    printf("PEAR : %d \n", PEAR);     // 5
    printf("ORANGE : %d \n", ORANGE); // 6
    printf("LEMON : %d \n", LEMON);   // 7

    return 0;
}

const定义常量

在声明变量时,使用const关键字用于指定变量的值不能被改变。

下面是const使用的例子:

#include <stdio.h>
int main(int argc, const char * argv[]) {
    const int i = 3;
    //i = 4; // error: cannot assign to variable 'i' with const-qualified type 'const int'
    const int i2;
    //i2 = 8; // error: cannot assign to variable 'i2' with const-qualified type 'const int'

    printf("i : %d \n", i);   // 3
    printf("i2 : %d \n", i2); // 0

    return 0;
}