const的新認識

2021-06-16 15:56:38 字數 925 閱讀 8549

今天發現乙個有趣的現象,有如下**:

void fun( char *p)

int main()

void fun(char *p) 和c=d這兩行會出現waring 其實這兩行都是相同的賦值語句,都是有const修飾的賦值給沒有const修飾的。

也就是說只能把沒有const修飾的賦值給有const修飾的,反之則waring 。

我在書上摘取以下這段話:

要使上述的賦值形式合法,必須滿足下列條件之一:

兩個運算元都是指向有限定符或無限定符的相容型別的指標,左邊指標所指向的型別必須具有右邊指標所指向型別的全部限定符。

正是這個條件,使得函式呼叫中實參 char *能夠與形參const char *匹配即

void fun(const char *a);

mian()

正常而不產生waring,它之所以合法,是因為在下面**中:

char *cp;

const char *ccp;

ccp=cp;

左運算元是乙個指向有const限定符的char的指標;

右運算元是乙個指向沒有限定符的char的指標;

char型別與chat型別是相容的,左運算元所指向的型別具有右運算元所指向型別的限定符(無),再加上自身的限定符(const);

以上分析便解釋了程式為什麼會出現waring;

附: const下面定符是修飾指標所指向的型別,而不是指標本身;

關鍵字const並不能把變數變成常量,在乙個符號前加上const限定符只是表示這個符號不能被賦值,也就是它的值對於這個符號來說是唯讀的,但它並不能防止通過程式的內部(甚至是外部)的方法來修改這個值。同時const修飾全域性變數和修飾區域性變數,資料所儲存的位置是不同的,所以對於區域性變數可以通過獲取它本身的位址來改變它的值,而全域性變數卻不行

const的基本認識(C)

在c語言中,const是用來定義常變數的,將變數變成唯讀型別,不能進行修改。const int a 100 a 10 error 不能進行修改 const還有幾個性質 1.資料型別對於const來說是透明的 const int a 100 等同於 int const a 100 2,const修飾它...

MySQL Varchar的新認識

mysql中的char,varvhar以及text型別一直是需要被搞清楚的一回事,他們之間的大致的區別在網上都有。我查了以後發現對於varchar,網上說的是最大長度為65535個位元組 網上說mysql5.0.3之後才有,5.0.3之前varchar的最大值並沒有那麼大,這個說法我並沒有去求證 於...

UML的新認識

中午無事,躺在床上翻看了 程式設計師 今年第8期上的乙個有關uml的專題討論,有些收穫,至少讓我對uml有了點兒新認識。今天讀了這一組文章,終於讓我心裡好受不少。原來,對於uml的認識,不只我乙個人有困惑。uml,作為乙個工具,它是用來幫助我們做事情的,而不能為了uml而uml,為賦新詞強作愁,成了...