二十一天学通C语言:使用const声明指针变量

二十一天学通C语言:使用const声明指针变量
本文节选自《21天学通C语言》一书

    已经学习了使用限定词const声明变量可以带来很多好处。同样地,限定词const也可以用来声明指针变量。根据const关键字在声明中出现位置的不同,可以得到多种const指针类型,下面将依次进行讲解。为方便表述,以int型代表数据类型名,以p代表变量名。
1.指向const的指针变量
声明指向const的指针变量有以下两种方式:
int const *p
const int * p
由于变量声明中,const和数据类型名的出现次序可以随意排列,因此,以上两种声明表达式是等效的。以上的两个表达式将变量p都声明为指向存储const int型数据的内存空间的指针变量,该类指针指向的内存空间的内容是不可变的。例如,以下操作是错误的:
01    const int a = 1;
02    const int * p1 = &a;
03    
04    *p1 = 2;
第4行语句通过赋值表达式改变p1指向的内存空间的内容,而声明中p1指向的内容是不可改变的,因此,该语句是错误的。
2.const型指针变量
int * const p
该表达式声明了一个int型的const指针变量,即该指针变量的值是不可以改变的,也就是说const型指针变量指向的内存空间是固定的,初始化后不能将其指向其他空间。例如,以下操作是错误的:
01    int a = 1;
02    int b = 2;
03    int * const p = &a;
04    *p = 12;                                        /* 正确 */
05    p = &b;                                        /* 错误 */
第4行,对int型const指针变量指向的内存空间赋值是允许的;但是第5行,试图改变const指针变量p的值,将p指向变量b的内存空间,这是错误的,因为const指针的值是不可变的。
3.指向const的const指针变量
const int * const p
该表达式声明了一个指向存放const int型空间的const指针变量,该指针变量的值和该指针指向的空间的值都是不可改变的。以下行为是错误的:
01    int a = 1;
02    int b = 2;
03    int const * const p = &a;
04    *p = 12;                                     /* 错误 */
05    p = &b;                                        /* 错误 */
第4行,试图改变p指向的内存空间的内容,也就是p指向的变量a的值,这是错误的;第5行,试图改变p的值,也是错误的。该指针变量的值及其指向空间的值都是不可改变的。

你可能感兴趣的:(c,存储,语言)