鍍金池/ 問(wèn)答/C  C++/ const聲明

const聲明

圖片描述
剛剛看Linux UNIX系統(tǒng)編程手冊(cè)時(shí)看到,這里的sys_siglist是什么?
我的理解如下,不知道對(duì)不對(duì)
首先sys_siglist是一個(gè)數(shù)組,里面每一個(gè)元素都是char *指針,比較疑惑的是兩個(gè)const.的作用什么?

回答
編輯回答
情未了
  1. sys_siglist使用extern修飾,說(shuō)明它是一個(gè)外部變量,聲明在其他頭文件中。

  2. 第一個(gè)const修飾的是數(shù)組變量中的元素, 即數(shù)組變量sys_siglist中的元素類型為const char *

  3. 第二個(gè)const修飾的是sys_siglist這個(gè)數(shù)組變量,即sys_siglist這個(gè)變量是const的,不能被修改,是只讀的。

2018年8月20日 09:37
編輯回答
話寡

月經(jīng)貼嗎...
a. const char* const sys_siglist
b. char const* const sys_siglist
這里a == b
一律從右往左讀. 把const寫在后面(即b)讀起來(lái)就很方便: sys_siglist是const pointer to const char
接下來(lái)就沒(méi)什么問(wèn)題了吧.

練習(xí):
typedef int *pint. const pint

  1. int* const

  2. const int*

  3. int const*

中的哪個(gè)(些)?

答案:
因?yàn)?code>pint其實(shí)是作為一個(gè)類型出現(xiàn)的, 所以const修飾的是這個(gè)類型, 用起來(lái)的感覺(jué)是和int const一樣的, 都是修飾其值, 對(duì)于pint來(lái)說(shuō), 值就是 int* . 這里我們也應(yīng)該把const放后面, 這樣就語(yǔ)義一致了: pint const == int* const. 所以讀法也是const pointer to int. 因此答案是1. 而和上面的a, b一樣, 2 == 3.

2018年1月29日 09:39