[原創]c語言中const與指針的用法


最近一直在准備筆試,補補大一大二欠下的課。復習c語言時碰見這么個題:

 
12345 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就沒問題了~

  



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com