歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C語言中const與指針的用法

C語言中const與指針的用法

日期:2017/3/1 9:18:09   编辑:Linux編程

最近一直在准備筆試,復習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就沒問題了~

Copyright © Linux教程網 All Rights Reserved