今天發現乙個有趣的現象,有如下**:
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,為賦新詞強作愁,成了...