就近原則 const關鍵字的使用

2021-05-21 13:05:38 字數 1751 閱讀 8214

在c中,const關鍵字的用途就是使函式操作時不改變其修飾的變數的值。平常我們見得多的const用法有如下幾種,似乎可以總結為「就近原則」:即const最靠近其右邊哪個變數,就說明那個變數為常量。」

c語言中const用法

在linux0.11中讀到skip_atoi()函式**,如下:

static

int skip_atoi(

const

char

**s)

函式功能很清楚,就是完成數字字串(alpha) 到整數(int)的轉化。但傳遞給skip_atoi()的引數型別卻讓我有些迷惑,對指向指標的指標(**)倒不存在什麼理解上問題,關鍵在於引數中 const到底是修飾s, *s, 還是**s呢?

在c中,const關鍵字的用途就是使函式操作時不改變其修飾的變數的值。平常我們見得多的const用法有如下幾種,似乎可以總結為「就近原則」:即const最靠近其右邊哪個變數,就說明那個變數為常量。」

const

int*p1;

/* p1所指向的int變數值不可改變,為常量,但可以改變p1指標的值 */

int*

const p2;

/* p2指標為常量,即p2的值不可改變,但可以改變p2指向物件的值 */

const

int*

const p3;

/* p3指標是常量,同時p3所指向int物件的值也是常量 */

俗話說,凡事都講究個有理可據,此處也不例外。從k & r 《the c programming language》(2nd)總算找到相關說明:

a.8.6.1

pointer declarators

in a declaration

t d

where

d has the form

* type-qualifier-list

opt d1

and the type of the identifier in the declaration

t d1

is ``type-modifier

t,'' the type of the identifier of

d is ``type-modifier type-qualifier-list pointer to

t.'' qualifiers following

* 由上可知,對於宣告,我們均以*號界定,並加以解析:

如const char **s;

解析理解為:

以最右邊第乙個*號開始界定,形式為const char ** | s, 由於s前沒有修飾符,因此可以改變指標值;s是指向const char *型別物件的指標,事實上const char *就是指標,因此s也就是指向指標的指標;

再以第二個*號來界定,形式為const char * | *s,由於*s前沒有修飾符,因此其值是可以改變的;

最後再來解析const char *物件,類似於前面談到的const int *p1,因此表示該指標(*s)所指向的對(此處為字串)為常量,其值不可改變;

同樣,如果有宣告如下:

const char ** const s;

解析它也只是s指標前多了修飾符const,因此s指標本身是常量,指標值不可改變;其餘意義同上面(2)(3)所述。

最後,給出相關測試**:

int main(

)

const關鍵字的使用

看到const 關鍵字,c 程式設計師首先想到的可能是const常量。這可不是良好的條件反射。如果只知道用const 定義常量,那麼相當於把火藥僅用於製作鞭炮。const 更大的魅力是它可以修飾函式的引數 返回值,甚至函式的定義體。const 是constant 的縮寫,恆定不變 的意思。被cons...

關鍵字排名中的十條就近原則

在關鍵字的排名研究中,我們發現那些關鍵字更靠前的網頁,在權重相差不多,甚至有一定差距的情況下,其在排名結果中常常具有較為前面的排名。這種通 過將關鍵字放在合適的位置,以在搜尋結果中排名靠前,並看上去是由於關鍵字出現在更靠前的位置而引起的,這樣的現象的實現方法稱為關鍵字就近原則。1 在網頁標題titl...

關鍵字const的使用總結

1.const是一種型別修飾符,用於說明永不改變的物件,const物件一旦定義就無法再改變,所以const物件必須初始化。2.頂層const與底層const區別 位於 左側為底層const,位於 右側為頂層const 頂層const意味著記憶體本身儲存的資料是常量,如int const a 3 即變...