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

C語言聲明的優先級規則

編輯:關於C語言

《Expert C Programming》(《C專家編程》)中提到C語言聲明的優先級規則如下:

A 聲明從它的名字開始讀取,然後按照優先級順序依次讀取;

B 優先級從高到低依次是:

B.1 聲明中被括號括起來的那部分;

B.2 後綴操作符:括號()表示這是一個函數,而方括號[]表示這是一個數組;

B.3 前綴操作符:星號*標識“指向……的指針”;

C 如果const和(或者)volatile關鍵字的後面緊跟類型說明符(如int,long等),那麼它作用於類型說明符,在其他情況下,const和(或)volatile關鍵字作用於它左邊緊鄰的指針星號。

並舉例說明:char * const * (*next)();

A      next      ——next為聲明的名字

B.1  (*next)       ——next為一個指向……的指針

B.2  (*next)()     ——next是一個函數指針

B.3  *(*next)()     ——next是一個函數指針,這個函數返回一個指向……的指針

C    char * const     ——指向字符類型的常量指針

故 char * const *(*next)();的含義就是: next是一個函數指針,這個函數返回一個指向字符類型的常量指針

下面我們來自己分析一個聲明:

int(*foo())[];

自己先推導一下,然後看看結果結果:foo為一個函數,這個函數返回一個指向整型數組的指針。對不對呢?下面我們來看具體的推導過程:

A    foo               ——foo為聲明的名字

B.2  foo()              ——foo為一個函數

B.3  (*foo())           ——foo為一個函數,這個函數返回一個指向……的指針

B.2  (*foo())[]          ——foo為一個函數,這個函數返回一個指向數組的指針

C    int (*foo())[]       ——foo為一個函數,這個函數返回一個指向整型數組的指針

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