<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. C語言

    C語言聲明學習之高級篇

    時間:2024-12-22 05:04:25 C語言 我要投稿
    • 相關推薦

    C語言聲明學習之高級篇

      C語言的設計哲學要求對象的聲明形式和它的使用形式盡可能相似,比如一個int類型的指針數組被聲明為int *p[3];并以*p[i]這樣的表達式引用或者使用指針所指向的int數據,所以它的聲明形式和使用形式非常相似。這樣做的好處是各種不同操作符的優先級在“聲明”和“使用”時是一樣的,而缺點恰好在與C語言的操作符的優先級過于復雜(有15級或者更多,取決于你怎么算),這是C語言設計不當、過于復雜之處。

    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是一個函數指針,這個函數返回一個指向字符類型的常量指針。

    【C語言聲明學習之高級篇】相關文章:

    C語言聲明學習之初級篇06-11

    C語言聲明學習之中級篇10-18

    C語言聲明的語法04-26

    C語言函數的聲明以及函數原型09-13

    C語言入門學習09-15

    學習C語言的方法10-14

    怎么學習C語言10-05

    如何學習c語言10-21

    C語言入門之指針用法06-24

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人