關於複雜資料型別如何理解的若干技巧

2021-07-11 08:23:57 字數 1063 閱讀 6525

一直以來,無論是對於c語言的初學者還是有一定修行的程式設計師來說,複雜的資料型別都是乙個不小的難題,比如說以下例子     int * ( * (* fp)(int))[10]; 似乎看起來很難懂,下面筆者就以多年的開發經驗,講解一下如何細分這個資料型別。

首先我先談一下我的技巧,主要有四點。

1.確定它是乙個變數,我們就要確定它儲存什麼型別的值,儲存什麼型別的值,就是什麼型別的變數。

2.確定它是乙個指標變數,就要確定它儲存什麼型別變數的位址(指向什麼型別),它儲存什麼型別變數的位址,它就是什麼型別的指標。

3.確定它是乙個陣列,就要確定陣列裡面的元素是什麼型別的,它的元素是什麼型別的,它就是什麼陣列。

4.確定它是乙個函式,就要確定它的返回值和形參。

相信大家看了上面可能還是有一些不解,但是上面對於我們解讀複雜資料型別的含義有著重要的作用,它可以協助我們準確的判斷順序,指標陣列和陣列指標是完全不同的概念,因此,順序很重要。

對於我個人來說,我習慣使用左右法則,下面我來講述一下整個流程。首先無論多麼複雜的資料型別一定都只有乙個變數名,這是毋庸置疑的,這就是我們的切入點,下面我舉乙個簡單的例子    

int (*a)[10];       顯而易見a就是我們說的變數名,接下來向右看,有乙個括號,向左看,有乙個指標,那麼根據第一條,它儲存的就是指標型別的值,也就是指標變數,接下來向左還是乙個括號,向右看,乙個陣列,那麼根據第二條,儲存的是陣列的位址,緊接著到了分號往左看,是int 型的,所以說綜合起來這就是乙個儲存陣列位址的整形指標,指標名字是a。

相信通過以上的例子,應該可以大致清晰整個流程,下面我來解釋一下開篇的那道題

fp是變數名,向右括號反方向向左,是個指標,緊接著向右,是乙個函式,也就是說fp是乙個函式指標,根據第四條,確認形參是int ,緊接著向左確定返回值,因為右括號,返回值是指標,向右確定是什麼樣的指標,是個陣列指標,確定陣列內容元素,向左還是指標,整形指標,綜合起來,fp是個函式指標變數,該指標變數指向乙個形參是int 返回值是乙個陣列指標的函式,該陣列指標指向乙個整形指標陣列。

相信大家已經有一定認識了,我出道題 int *(*(*arr[5])())(); 答案我會在下乙份部落格上給出,歡迎提出各種問題。

複雜資料型別

1 在c語言中,除了之前學到的基本資料型別 整型,浮點型,字元型 外,還有指標型別和構造型別 結構型,聯合型,列舉型 2 結構體型別,用於把不同型別的資料組合成乙個集合體,宣告格式 struct 結構名 例如 includestruct students void main 結構體的特點是 表示更豐...

複雜資料型別

1結構體 相當於是高階語言裡的類,但是他沒有方法,也就是行為,只有屬性,也就是成員,結構體相當於是自定義類 宣告struct students 當我們需要使用結要用結構體裡的類的屬性時,我們需要通過 運算子來進行呼叫,比如 students.age 2列舉它被用來存放固定的不可改變的型別,比如說,四...

複雜資料型別

1 定義形式 指向的內容的型別 指標名 2 存在空指標 3 指標變數存的是位址。提到指標便會有乙個指向關係。4 指標可以動態申請陣列new。使用後可以delete 5 陣列名是乙個常指標。它指向的位址不再改變。6 指標 指標有當前指向的位置,也就是指標存的位址,加乙個此指標所指向的內容的位元組數大小...