C復(fù)雜函數(shù)解讀

#include <stdio.h>
#include <stdlib.h>

//復(fù)雜函數(shù)
//右左法則: 首先從圓括號起, 向右看, 然后向左看, 每當(dāng)遇到圓括號時, 就調(diào)轉(zhuǎn)閱讀方向.
//當(dāng)括號內(nèi)容解析完畢, 就跳出這個括號, 重復(fù)這個過程, 直到表達式解析完畢.
//int *(*(*pfun)(int *))[10];
//首先找到未定義的標(biāo)識符pfun, 當(dāng)向右看時, 遇到括號, 于是調(diào)轉(zhuǎn)方向, 向左看, 遇到了 *, 說明 pfun是一個指針.
//繼續(xù)想左看, 又遇到了括號, 則跳轉(zhuǎn)閱讀方向, 開始向右看. 遇到的是另外一個括號, 因此說明指針pfun所指向的是一個函數(shù). 函數(shù)的參數(shù)是一個整形指針.
//繼續(xù)向右看, 遇到了 (int *) 的右括號, 再調(diào)轉(zhuǎn)方向, 向左看.遇到了一個 *(*(*pfun) 第二個 *, 說明改函數(shù)的返回值是一個指針.
//繼續(xù)向左看, 又遇到了 *(*(*pfun) 最左邊的括號, 再調(diào)轉(zhuǎn)方向向右看.當(dāng)前括號內(nèi)的已全部看完, 除了括號就是數(shù)組.
//說明指針?biāo)赶虻暮瘮?shù)的返回值類型的指針指向的是數(shù)組.
int main()
{

  //首先找到未定義的標(biāo)識符, 既 func.
  //它的外面有一對圓括號, 而且左邊有一個*號, 說明func是一個指針
  //接著跳出這個括號, 先看右邊, 也是一個圓括號, 這說明 (*func) 指向的是一個函數(shù).函數(shù)接收一個int *類型的形參. 返回值是int.
  //而 func 則是一個指向這個函數(shù)的指針, 被稱為函數(shù)指針.
  int (*func)(int *pInt);
  //這個例子和上面的相似, 只是多了一個參數(shù), 這個參數(shù)是函數(shù). 這個函數(shù)返回值為int,參數(shù)為int *
  int (*func1)(int *pInt1, int (*f)(int *));
  //函數(shù)指針數(shù)組
  //在同一個括號內(nèi), 數(shù)組的優(yōu)先級大于*, 所以這里, func2就是一個數(shù)組.數(shù)組前面有個*, 說明這是一個指針數(shù)組.存放元素的指針.
  //接著向右看, 確定了數(shù)組元素類型是函數(shù).數(shù)組內(nèi)每個元素都指向一個函數(shù),
  //函數(shù)接受一個指針參數(shù). 返回類型是int.
  int (*func2[5])(int *pInt1);
  //定義指向函數(shù)指針數(shù)組的指針
  //func 被一個圓括號包含, 向右看是一個), 接著向左是一個*, 說明func3是一個指針,
  //接著向右看, 出括號, 是一個[]運算符號, 說明func是一個指向數(shù)組的指針. 繼續(xù)向右看看到了一個), 那就向左看,又有一個*
  //說明數(shù)組元素也是指針.繼續(xù)向左, 看到一個(, 然后向右看, (int *pInt), 說明指針指向了一個函數(shù),
  //返回值為int, 參數(shù)為(int *pint)指針的函數(shù).
  //與上面 int (*func2[5])(int *pInt1); 不同的是, 這里func3指向的是整個數(shù)組, 數(shù)組中每個元素是一個函數(shù)指針.
  int (*(*func3)[5])(int *pInt);
  //(*func4) 是一個指針
  //(*func4)(int *pint) 說明*func4是一個函數(shù)指針, 指向的函數(shù)接收一個 int*類型的參數(shù).
  //剩下的 int(*)[5] 是返回值部分, 即返回一個指針, 該指針指向一個包含5個int類型元素的數(shù)組.
  int (*(*func4)(int *pInt))[5];

  //錯誤寫法
  //func是一個返回值為int類型數(shù)組的函數(shù), C語言的返回值不能直接為數(shù)組.
  //數(shù)組名是一個常量名, 無法對常量進行賦值.
  //int func5(void)[5]

  return 0;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容