C語言聲明學習之高級篇
C語言的設計哲學要求對象的聲明形式和它的使用形式儘可能相似,比如一個int類型的指針數組被聲明為int *p[3];並以*p[i]這樣的表達式引用或者使用指針所指向的int數據,所以它的聲明形式和使用形式非常相似。這樣做的好處是各種不同操作符的優先級在“聲明”和“使用”時是一樣的,而缺點恰好在與C語言的操作符的優先級過於複雜(有15級或者更多,取決於你怎麼算),這是C語言設計不當、過於複雜之處。
實際上有些關鍵字只能出現在聲明中,而不是使用中,比如volatile和const等,這使得聲明形式和使用形式能完全對的上號的例子越來越少了。如果想要把什麼東西強制轉換為指向數組的指針,就不得不使用下面的語句來表示這個強制類型轉換:
———char (*j) [ 20 ];
———j = ( char ( * )[20] ) malloc(20);
這個強制類型轉換看上去很滑稽,星號兩邊的括號看上去可有可無,但是如果去掉就會變成非法語句。
涉及指針和const得聲明可能會有下面幾種不同的組合:
———const int * p;
———int const * p;
———int * const p;
前兩種情況,指針所指向的對象是隻讀的,而最後一種情況下指針是隻讀的。
如果我們想讓對象和指針都是隻讀的,那麼下面兩種聲明都能做到這一點:
———const int * const p;
———int const * const p;
經過初級篇、中級篇一直到前面的.學習我們發現其實分析一個聲明就是按照操作符優先級規則把聲明分解開來,分別解釋各個組成部分。要理解一個聲明,必須要懂得其中的優先級規則,下面是《C專家編程》中總結的C語言聲明的優先級規則:
A聲明從它的名字開始讀取,然後按照優先級順序依次讀取;
B 優先級從高到低依次是:
B.1 聲明中被括號括起來的那部分;
B.2 後綴操作符:括號()表示這是一個函數,而方括號[]表示這是一個數組;
B.3 前綴操作符:星號*標識“指向……的指針”;
C 如果const和(或者)volatile關鍵字的後面緊跟類型説明符(如int,long等),那麼它作用於類型説明符,在其他情況下,const和(或)volatile關鍵字作用於它左邊緊鄰的指針星號。
現在,讓我們用優先級規則來分析C語言的一個較複雜的聲明:
———char * const *(*next) ();
B.1 (*next) ——next為一個指向……的指針
B.2 (*next)() ——next是一個函數指針
B.3 *(*next)() ——next是一個函數指針,這個函數返回一個指向……的指針
C char * const ——指向字符類型的常量指針
故 char * const *(*next)();的含義就是:next是一個函數指針,這個函數返回一個指向字符類型的常量指針。
-
2017年C語言新增無紙化真題練習
C語言的應用範圍廣泛,具備很強的數據處理能力,不僅僅是在軟件開發上,而且各類科研都需要用到C語言,適於編寫系統軟件,三維,二維圖形和動畫,具體應用比如單片機以及嵌入式系統開發。以下是小編為大家搜索整理的2017年C語言新增無紙化真題練習,希望能給大家帶來幫助!更多...
-
關於C語言精選模擬練習題
C語言是一個有結構化程序設計、具有變量作用域(variablescope)以及遞歸功能的過程式語言。下面是小編為大家整理的關於C語言精選模擬練習題,歡迎參考~5:請編寫一個函數fun,它的功能是:比較兩個字符串的長度,(不得調用c語言提供的`求字符串長度的函數),函數返回較長...
-
c語言中多個if的用法
c語言中多個if的用法的用法你知道嗎?下面小編就跟你們詳細介紹下c語言中多個if的用法的用法,希望對你們有用。c語言中多個if的用法的用法如下:用if語句可以構成分支結構。它根據給定的條件進行判斷,以決定執行某個分支程序段。C語言的if語句有三種基本形式。語句的...
-
2017年3月計算機二級C語言考試摸底測試題
以下是yjbys考試網小編整理的2017年3月計算機二級C語言考試摸底測試題,希望對大家有所幫助,祝大家計算機二級考試順利通過。一、選擇題(每小題1分。)(1)程序流程圖中帶有箭頭的線段表示的是()。A.圖元關係B.數據流C.控制流D.調用關係(2)結構化程序設計的基本原則...