• const意味着常数
  • const定义的变量,他的值不能被改变,在整个作用域中都保持固定
  • 同宏定义一样,可以避免意义模糊的数字出现,同样可以很方便的进行参数的调整和修改
  • 可以保护被修饰的东西,防止意外的修改,增强程序的健壮性
  • const是通过编译器在编译的时候执行检查来确保实现的。

const与指针

指针 含义
const int a; a是一个常整型数
int const a; a是一个常整型数
const int *a; a是一个指向常整型数的指针(数不可修改,指针可以修改)
int const *a; a是一个指向整型数的常指针(数可修改,指针不可以修改)
const int *const a; a是一个指向常整型数的常指针(数不可修改,指针不可以修改)
int const *const a; a是一个指向常整型数的常指针(数不可修改,指针不可以修改)

const与函数

const通常用在函数形参当中,如果形参是一个指针,为了防止在函数内部修改指针指向的数据。就可以用const来限制。比如在String的程序中就有很多const修饰形参的情况。

void StringCopy (char* strDestination, const char *strSource)

const还可以表示该函数返回的一个常量,放在函数的返回值的位置,例如

const char * GetString(void);

在类成员函数的声明和定义之中,const放在函数的形参表之后,函数体之前,表示该函数的this指针是一个常量,不能修饰该对象的数据成员,例如

void getId () const;

实例:

下面这段程序的运行结果?

int main ()
{
    const int x = 5;
    const int *ptr;
    ptr = &x;
    printf("%d\n",x);
    return 0;
}

编译出错

x是常整型数,ptr是指向常整型的指针。ptr = &x;,即ptr = 10;,违反了const的规则;const是通过编译器在编译的时候检查来实现的,所以编译报错。


参考: