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