const是一個C語言的關鍵字,它限定一個變量不允許被改變。使用const在一定程度上可以提高程序的安全性和可靠性,另外,了解const的作用,在看別人的代碼時,對理解對方的程序有一定幫助。
1、const可以理解成是”只讀變量“的限定詞,從這里可以看出,const修飾的是變量,跟常量是不同的,常量是被編譯器放在內存中的只讀區域,當然也就不能夠去修改它。而”只讀變量“則是在內存中開辟一個地方來存放它的值,只不過這個值由編譯器限定不允許被修改。const就是用來限定一個變量不允許被改變的修飾符。因為const聲明的變量是只讀變量,所以它不能通過賦值、增量或減量運算來修改該變量的值,只能夠初始化一個const變量,初始化完成后,不能再改變它。
**const int nochange;nochange = 12;/*這是不允許的*/**
**const int nochange = 12;/*這是可以的*/**
2、在聲明指針時使用關鍵字const,一定要區分讓指針本身成為const與讓指針指向的值成為const區分開來。
const float *pf;/*pf指向一個常量浮點數值,pf指向的值必須是不變的,但pf本身的值可以改變*/
float ?*const pt;/*pt是一個常量指針,它必須總是指向同一個地址,但所指向的值可以改變*/
const float *const ptr;/*ptr必須總是指向同一個位置,并且它所指位置存儲的值也不能改變*/
**float const *pfc;等同于const float *pfc;**
把const放在類型名的后邊和*的前邊,意味著指針不能用來改變它所指向的值。總之,一個位于*左邊任意位置的const使得數據成為常量,而一個位于*右邊的const使得指針自身成為常量。
**常見用法是聲明作為函數形式參量的指針。**
3、對全局數據使用const。
首先遵循外部變量的慣用規則:在一個文件中進行定義聲明,在其他文件中進行引用聲明(使用extern關鍵字)。
~~~
/*file.c——定義一些全局變量*/
const doubule PI = 3.141;
/*file2.c——使用在其他文件中定義的全局變量*/
extern const double PI;
~~~
其次是將常量放在一個include文件中。這時還必須使用靜態外部存儲類:
~~~
/*constant.h——定義一些全局變量*/
static const double PI = 3.141;
/*file1.c——使用在其他文件中定義的全局變量*/
#include "constant.h"
/*file2.c——使用在其他文件中定義的全局變量*/
#include "constant.h"
~~~
如果不使用關鍵字static,在文件file1.c和file2.c中包含constant.h將導致每個文件都有統一標示符的定義聲明。
- 前言
- (四)回調函數
- (一)while(1)死循環與for(;;)死循環的區別
- (二)static關鍵字
- (三)函數
- (四)可變參數函數
- (五)setjmp和longjmp
- (六)指針
- (七)回調函數
- (八)字符串
- (九)動態內存分配
- (十)結構體
- (十一)深入理解指針
- (十二)命令行參數
- (十三)printf、fprintf、sprintf和snprintf函數
- (十四)const關鍵字詳解
- (十五)字符串輸入函數fgets、gets和scanf
- (十六)字符串輸出函數puts、fputs和printf
- (十七)字符/字符串輸出函數fputc、fputs、putc、putchar和puts
- (十八)字符/字符串輸入函數fgetc、fgets、getc、getchar和gets
- (十九)restrict關鍵詞
- (二十)scanf函數詳解
- (二一)內聯函數
- (二二)位操作
- (二三)errno變量
- (二四)內存分配