C和指针 3.4 常量

缘起

《C和指针》3.4节

分析

ANSI C标准允许你声明常量. 和普通的变量一样,但是它不能被修改. 涉及const关键字.

1
2
const int a;
int const a;

上面两种等价.

a一旦初始化之后就不能被修改,那么什么时候初始化呢?

  1. 声明的时候就初始化,也就是定义

    1
    const int a = 1;
  2. 作为函数入参.

当const和指针碰撞在一起的时候,问题就变得有趣起来. 因为有两个不可变——指针变量本身的值和指针变量指向的内存中的内容,那么到底是哪个不可变呢? 还是两个都不可变?

下面的代码声明了指向整型数据的指针p

1
2
3
int const *p; // p可修改,但是p指向的内容不可改
int *const p; // p不可以修改, 但是p指向的内容可以修改
int const *const p; // 都不能修改

将不会变化的变量声明为const是一种良好的编码习惯.

#define 也是声明常量的方式.