c中的const使用大全

2021-07-01 19:46:00 字數 1758 閱讀 3720

case1 :

const int n=5;

int a[n];

不能這樣使用,即使編譯通過,對陣列a大小的宣告也是無效的。因為const修飾的是唯讀變數,而ansi c規定

陣列定義時長度必須是「常量」,

在ansi c中用什麼來定義

常量呢?答案是

enum型別和#define巨集,這兩個都可以用來定義常量。

case 2:

例:下面的**編譯器會報乙個錯誤,請問,哪乙個語句是錯誤的呢?

typedef char * pstr;

char string[4] = "bbc";

const char *p1 =" string"; //1式

const pstr p2 =" string"; //2式

p1++;

p2++;

答案與分析:

問題出在p2++上。

const使用的基本形式是:

形式1:const type m:其中m是限定不可變的,type是資料型別,可以使標準資料型別,也可以是自定義型別。此例中pstr是自定義的資料型別,因此p2是不可變的。

形式2:

type const m;//只要牢記這兩種基本形式,在含多個const的語句中,可以先把const 去掉分析。

例如:

const char * const p; //*p和p都不可變

//倆個都去掉:char *p;//定義的是字元型指標

//去掉乙個:char *const p;//由形式2可知,p不可變

const  char *p;//由形式1可知,*p不可變

case 3

int const * p1,p2;

int d=9;

p2=5;//錯誤,p2是const的

p1=&d;//正確,p1不是const

*p1=3;//錯誤,*p1是const

printf("%d\n",*p1);

*p1++;//*的優先順序低於++;所以可以編譯通過 但位址已經不是d的位址

printf("%d\n",*p1);

p2是const;(*p1)是一整體,因此(*p1)是const,但p1是可變的。

同樣去掉const分析,int * p1,p2只代表p1是指向整型的指標,要表示p1、p2都是指標是需寫成int * p1,* p2。 而

int * const p1,p2;

int d=9;

p2=5;//正確,p2不是const的

p1=&d;//錯誤,p1是const

*p1=3;//正確,*p1不是const

補充:

int* const px;//這種定義是不允許的,即使在c中編譯可以通過,但在c++編譯不通過。(指標常量定義的時候需對其進行初始化)

int const *px;這種定義是允許的。同樣在c中可以編譯通過,但在c++中編譯不通過(常指標可以再定義的時候不初始化)

c++中需要對const常量定義時同時初始化。

總結:

使用const定義唯讀變數時關鍵要弄清楚哪些量是唯讀的不可變的,哪些量是可變的。

例如:int const px;

px=9;//非法,px是唯讀的。因此在定義時最好完成初始化工作。

C中CONST的使用

基本解釋 const是乙個c語言的關鍵字,它限定乙個變數不允許被改變。使用const在一定程度上可以提高程式的健壯性,另外,在 別人 的時候,清晰理解const所起的作用,對理解對方的程式也有一些幫助。雖然這聽起來很簡單,但實際上,const的使用也是c語言中乙個比較微妙的地方,微妙在何處呢?請看下...

c中const的使用

const關鍵字 int const p和const int p的功能一樣,都是p指向的物件不能通過p指標改變,p可以變 即 p為常量,不可以改變,而指標p為變數可以更改。int a 1 int b 2 int const p1 p1 a p b 可行 p1 3 不可以 int const p宣告中...

C中CONST的使用

基本解釋 const是乙個c語言的關鍵字,它限定乙個變數不允許被改變。使用const在一定程度上可以提高程式的健壯性,另外,在 別人 的時候,清晰理解const所起的作用,對理解對方的程式也有一些幫助。雖然這聽起來很簡單,但實際上,const的使用也是c語言中乙個比較微妙的地方,微妙在何處呢?請看下...