當前位置:學者齋 >

計算機 >C語言 >

const的理解和用法

const的理解和用法

const在C中的用法很靈活,下面內容由小編為大家介紹const的理解和用法,供大家參考!

const的理解和用法

一、關於const的具體定義:

——個人感覺很難對它下一個標準的定義,因為的用法很靈活,似乎對它定義後總無法讓人能夠明白它的意思,而且容易讓人產生誤解(也許是偶水平太菜了)。例如,把它有定義:一個能夠讓變量變成無法修改的常量的關鍵字。那麼,這樣的話,就可能讓人誤解為只要有const在定義變量裏面,那變量就無論怎樣都無法修改。這樣的理解是很片面的(下面用法方面將對這問題做探討)。因此,本人在此不敢對它下定義,其他參考書好象也沒有下定義。

二、關於const的具體作用

——const作用就靈活了,一個表達式中const放置的位置不同,效果可能就不一樣了。下面分具體情況分析(當然,所舉的情況並非覆蓋全部情況)

A。const最經常的用法

1.為了防止傳遞的函數參數不被修改,在調用函數的形參中用const關鍵字.

//Example ->

int FindNum(const int array[], int num, int conut);//聲明函數

//code...

int FindNum(const int array[], int num, int count)

{

int i;

int flag = 1;

for (i = 0; (i < count) && flag; i++)

{

if (array[i] == num)

{

flag = 0;

break;

}

}

return flag;

}

//code...

上面這例子中,編譯器會把array[]當作常量數據的數組看待。所以,假如你不小心給數組賦值,那麼,編譯器就會報錯了。因此,當你不需要也不想修改數組的數據時,最好用const把數組定義為常量數組。

t可以用來創建數組常量、指針常量、指向常量的指針等:

const char ch = 'a';

const int a[5] = {1, 2, 3, 4, 5};

const int *p = a; //a是一個數組的首地址.p是指向常量的指針

int * const p = a; //a是一個數組的首地址.p是指針常量;

const int * const p = a; //a是一個數組的首地址。p是指向常量的指針常量

前兩種情況很簡單,現在着重分析一下後三種用法,因為這3種情況容易出錯,偶就有時候怕用錯了乾脆不用const.

——const int *p = a;

//p是指向常量的指針,因此,不可以通過給指針賦值來改變數組

//中的數據,例如:

// *p = 10;

// *(p + 2) = 1;

//假如指向常量指針可以改變值,那麼,就等於也改變了數組的數

//據了。假如你不理解,偶倒有一個辦法讓你理解,你就想你和一

//個人綁在一起,有可能你移動了位置而他不跟着你移動嗎!哈哈

——int * const p = a;

//看這表達式,const的位置和第一個不同吧!他們的用法和作用

//就完全不一樣了。這時候p是指針常量,我們知道,指針是指向

//了一個數組的首地址,那麼,它的位置就不可以改變了。但是你

//現在應該和第一個表達式比較了,現在的數組並不是常量數組,

//所以數組的數據是可以改變的,而指針這時候它是不可以移動的

//,指向數組第一個數據,所以它可以而且只可以改變數組第一個

//數據的.值。這一點請別誤解,指針常量只是它的地址不可以改變

//,並不是它指向的內容一定不可以改變,這一點切記!

//好啦。假如你又不理解,偶又有一個比較形象的例子來説明:

//假如有一個固定的人拉着另外一個人的手,注意,固定的人相當

//於他是不可以由其他人來替換的。但是他可以拉其他人的手啊,

//並不一定規定他必須拉同一個人的手啊。現在你應該可以有個比

//較深的印象和理解吧:P

//下面舉幾個例子幫助理解:

// *p = 2;

// *(p+1) = 10;

// p++;

——const int * const p = a;

//假如前面兩種表達式的本質你理解了,這種表達式你來理解根本

//沒有問題,const現在有兩個,而且一個const的位置是第一種情

//況的位置,第二個const是第二種情況的位置,所以這表達式的功

//能就是前兩種情況的作用總合。這裏不多説!

//下面舉幾個例子幫助理解:

// *p = 2;

// *(p + 2) = 10;

// p++;

B。const並不會阻止參數的修改

之所以把這作為一點來談,就是因為有一些朋友可能會以為在函數參數中用了const就一定不可以改變

參數,這實際上是錯誤的理解,因為,它並不阻止參數的修改,下面舉個簡單的例子來闡述一下;

#include

#include

void ChangeStr(const char *String);

int main(void)

{

char str[] = "The C programme";

Change(str);

printf(str);

system("Pause");

return 0;

}

void ChangeStr(const char *String)

{

char *Source = (char *)String;

while (*Source)

{

*Source = toupper(*Source);

Source++;

}

}

//end

上面的程序把字符串中的每個字符都轉換成大寫字母了。因為*String把地址給了*Source,而*Source的值的改變編譯器並不干涉,可能有的編譯器會發出警告之類。上面的程序只是為了説明const並不會阻止參數的修改,如果象上面程序那樣,個人感覺沒什麼意義,只會讓人容易混亂而已。

關於CONST的用法和理解本人也就只能説這麼多了,當然,很可能有更多高級或者少用的用法,由於水平

經驗有限,確實不能再説些什麼。

標籤: const
  • 文章版權屬於文章作者所有,轉載請註明 https://xuezhezhai.com/zh-mo/jsj/cyuyan/m9qdr.html