#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;
}
C復(fù)雜函數(shù)解讀
?著作權(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ù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 接下來我將持續(xù)更新“深度解讀《深度探索C++對象模型》”系列,敬請期待,歡迎關(guān)注!也可以關(guān)注公眾號:iShare愛...
- /* **test20.cpp : Defines the entry point for the console...
- 文件使用解讀 自定義頭文件.h 和實現(xiàn)文件.c .h 函數(shù)的聲明 變量的聲明 (不能賦值).c 具體實現(xiàn) 實現(xiàn)函...
- iOS main函數(shù)的一些知識,對于這個函數(shù)始終有一些神秘感,究其原因,我想大概他的那兩個參數(shù)是脫不了干系的,于是...