C语言中const与指针的用法

最近一直在准备笔试,复习C语言时碰见这么个题:

int a=248, b=4;

int const c=21;

const int *d=&a;

int *const e=&b;

int const * const f =&a;
 

请问下列表达式哪些会被编译器禁止?
A:*c=32

B:*d=43
C:e=&a

D:f=0x321f

E:d=&b

F:*e=34

下面逐条分析
第一行代码不提, 第二行,int const c=21;和const int c=21;是一个意思,都是修饰c为const,即c的值不能变化。所以A,肯定错,c就不是一个指针;
第三行:const int *d=&a;表示d指向的值是不可通过指针改变的,所以B:*d=43错误。而d的指向是可变的,这里d=&a,E:d=&b也是正确的;
第四行:int *const e=&b;表示指针e的指向是不能改变的,所以C错;但可以改变指向的值,*e=34是正确的,F正确;
第五行:int const * const f =&a;表示指针f的指向和指向的内容都不能改变,D错误
题目问哪些会被禁止,所以答案是ABCD。

这里百度百科里介绍了一个方法:
const在*的左边,则指针指向的变量的值不可直接通过指针改变(可以通过其他途径改变);在*的右边,则指针的指向不可变。简记为“左定值,右定向”

但是一定要注意,int * const p; int const * const p; 或者 const int * const p;这三种表示都是指针指向不能改变的,定义时要初始化一个地址。

基本上const就没问题了~

相关推荐