程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> const關鍵字,const

const關鍵字,const

編輯:關於C語言

const關鍵字,const


  • 問題提出

    請問分析以下幾個定義:

const char* p1;
char const* p2;
char* const p3;
const char** p4;
char const** p5;
char* const* p6;
char** const p7;

 

    90%的人前三個沒問題。而後面幾個估計很多人都會繞糊塗了。本人查過一些資料(包括網上的和書本的),但是個人感覺那些資料對於const的作用、const指針和指向const值的指針的解讀略有欠缺且稍顯繁亂。因而本人本著拋磚引玉的目的寫下這篇筆記,歡迎大家指教和討論。

 

  • const的作用

    const關鍵字的作用可以概括為:將其右邊第一個符號限定為constant。這裡的符號定義為:數據類型[*]或者是[*]變量名*(方括號表示可選)。在定義(聲明)某個變量的時候,如果變量名被修飾為constant,則需要在定義(聲明)的時候賦值。根據上這一理論,p1~p7為變量名。char* const p3中,const修飾p3,p3在定義的時候必須賦值;const char** p4中,const修飾char*,*p4指向const char*,*p4在定義的時候不需賦值;其它幾個同理。

 

  • 關於賦值形式的合法性

    《C專家編程》第19頁倒數第二段說:

    要使賦值形式合法,必須滿足下列條件之一:兩個操作數都是指向有限定符或無限定符的相容類型的指針,左邊指針所指向的類型必須具有右邊指針所指向類型的全部限定符。

    也就是說,在賦值的時候,要麼兩邊具有相同的限定性且是相容類型,要麼左邊的限定性比右邊的多。結合上一部分const的作用,我們知道const char**char**是不相容的類型,不能相互賦值。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved