以const型別關鍵字宣告的物件,其值不能通過賦值來遞增,遞減來修改。
以下**:
const
int a =12;
//限定a的值不能修改
a =12
;//不可以
編譯器會報錯,但是可以初始化變數,因此下面的**沒問題:
const
int a =12;
//沒問題
該宣告讓a
成為唯讀變數。初始化後,就不能改變它的值。
可以用const
關鍵字建立不允許修改的陣列:
const
int days=
;
宣告普通變數和陣列時使用const
關鍵字很簡單。指標則複雜一點,因為要區分是限定指標本身為const
還是限定指向的值為const
。下面的宣告:
const
float
*pf;
//pf指向乙個float型別的const值
建立了pf
指向的值不能被改變,而pf
本身的值可以改變。例如,可以設定該指標指向其它const
值,相比之下,下面的宣告:
float
*const pt;
//pt是乙個const指標
const
*float
*const ptr;
表明ptr
既不能指向別處,它所指向的值也不能改變。
還可以把const
放在第三個位置:
float
const
*pfc;
//與const float *pfc等價
總結:
把const放在型別名後,*之前,說明該指標不能改變它所指向的值。
簡而言之,const放在*左側的任意位置,限定了指標指向的資料不能改變;
const放在*的右側,限定了指標本身不能改變
const
關鍵字的常見用法是宣告為函式形參的指標。例如,假設有乙個函式要呼叫display()
顯示乙個陣列的內容。要把陣列名作為實際引數傳遞給該函式,但是陣列名是乙個位址。該函式可能會更改主調函式的資料,但是下面的原型保證了資料不會被修改:
void
display
(const
int arry ,
int limit)
;
順帶一提,當陣列名作為實參傳遞時,形參可以是以下幾種形式:
一維陣列:
int arry[
]
與下面等價:
int
*arry
二維陣列:
int arry[
][colums]
;
與下面等價:
int
*(arry)
[colums]
因為乙個中括號表明是乙個指標。
使用全域性變數是一種冒險的方法,因為這樣做暴露了資料,程式的任何部分都能更改資料,但如果把資料設定為const
,就可以避免這樣的危險,因此使用const
限定符宣告全域性變數很合理,然而,在檔案間共享const
要小心,可以採用兩個策略:
在乙個檔案中採用定義式宣告,另乙個檔案採用引用式宣告:
/*file1.c---定義了一些外部const變數*/
const
double pi =
3.1415926
;const
char
*months [12]
=;/*file2.c---使用定義在別處的外部const變數*/
extern
const
double pi;
extern
const
char
*months[
];
把const
變數放在另乙個標頭檔案中,然後在其它標頭檔案中包含該標頭檔案:
/*constant.h--定義了一些外部const變數*/
static
const
double pi =
3.1415926
;static
const
char
* months =
;/*file1.c---使用定義在別處的外部const變數*/
#include
"constant.h"
/*file2.c---使用定義在別處的外部const變數*/
#include
"constant.h"
這種方案必須在標頭檔案中使用關鍵字static
宣告全域性變數。如果去掉static
,那麼在file1.c
和file2.c
中包含constant.h
將導致每個檔案中都有乙個相同識別符號的定義式宣告,實際上,這種方法為每個檔案提供了乙個單獨的資料副本,每個副本只對該檔案可見,所以無法用這些資料與其它檔案通訊,不過他們是完全相同的。 11 3 ANSI C型別限定符
這篇說一下2個關鍵字 const,volatile.內容在書12.5章.以const宣告的物件,值不能通過賦值或遞增遞減來修改,比如下面的 就是不合法的.1 const int ci 100 ci 10 2 const char cc cc c 但是這樣是合理的 const int i 32 對於指...
linux volatile型別限定符
背景 一直會有意無意的看到有這個volatile,但是做為乙個在linux應用層寫了幾年 的程式設計師,還真的沒有搞懂什麼時候需要這樣用?查了一圈,網上都是各種告訴編譯器不要把該變數放到暫存器,放到暫存器,如果其它地方改了拿不到最新的值,不要優化等等 首先說下,組合語言真的屬於基本不會那種。多執行緒...
C C volatile型別限定符
volatile 限定符告知計算機,而不是變數所在的程式 可以改變該變數的值。通常,它被用於硬體位址以及在其他程式或同時執行的執行緒中共享資料。例如,乙個位址上可能儲存著當前的時鐘時間,無論程式做什 麼,位址上的值都隨時間的變化而改變。或者乙個位址用於接受另一台計算 機傳入的資訊。volatile的...