[原创]c语言中const与指针的用法

最近一直在准备笔试,补补大一大二欠下的课。复习c语言时碰见这么个题:

 
1
2
3
4
5
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就没问题了~

  


posted @ 2016-03-12 00:10  LibraSun  阅读(619)  评论(0编辑  收藏  举报