C语言学习笔记(16)
在C語言中,經常會出現一些復雜的類型聲明。而大多數都是涉及到指針的類型。
那么就在這一節來集中認識一下。
首先,我們先來了解*,()和[]的組合。在看實際例子前,先來看一個重要的規則:
在做選擇時,始終使[]和()的優先級大于*。舉個簡單的例子:
int *arr[10]。由于[]的優先級大于*。也就代表,首先這是一個含有10個元素數組,那么數組內的內容是什么呢?是int *arr。去掉類型名稱,數組內的類型是int *。所以這是一個含有10個整數類型指針的數組。
同樣的規則繼續看:float *fp(float)。由于()的優先級大于*,所以說明這首先是一個函數,函數的返回類型是指向float類型的指針。
void (*fp)(float)。由于括號的存在,代表首先這是一個指針,這個指針指向什么呢?指向的是一個參數個數為1,類型是float的函數。
接下來看一個復雜的:(*(void(*)())0)();讓我們慢慢來拆分,首先(void(*))()是一個函數指針類型的原型,因此(void(*)())0是將0轉換成一個函數指針類型,那么(*(void(*)())0)也就是地址0處所在的函數,那么上面一條語句的意思也就是執行地址0處的函數。
上面的語句看起來非常復雜繁瑣,因此我們在實際工作中,最好使用typedef來重新制定一下比較復雜的數據類型:
例如上面的例子:我們不妨typedef void (*functionPoint)(); 這樣我們就可以非常簡單的
(*(functionPoint)0)();
這樣是不是容易理解了很多呢?
?
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的C语言学习笔记(16)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hadoop框架:NameNode工作机
- 下一篇: 社区架构培训班四期开始报名了