c指標與陣列,函式的混合定義

2021-10-03 20:37:34 字數 2691 閱讀 2601

參考《讓你不再害怕指標》

從復合函式整體換元從外層到內層,並且每層從函式呼叫和賦值來講肯定有意義,這兩個角度理解。前提還是要知道結合的優先順序。

int p;//這是乙個普通的整型變數

沒什麼好說的

int *p;

//首先從p 處開始,先與*結合,所以說明p 是一

//個指標,然後再與int 結合,說明指標所指向

//的內容的型別為int 型.所以p 是乙個返回整

//型資料的指標

沒什麼好說的

int p[3];

//首先從p 處開始,先與結合,說明p 是乙個數

//組,然後與int 結合,說明陣列裡的元素是整

//型的,所以p 是乙個由整型資料組成的陣列

int a ;a 是乙個int

p[3] = a, 看成賦值語句,那麼說明p 是乙個 int 陣列

int *p[3];

//首先從p 處開始,先與結合,因為其優先順序

//比*高,所以p 是乙個陣列,然後再與*結合,說明

//陣列裡的元素是指標型別,然後再與int 結合,

//說明指標所指向的內容的型別是整型的,所以

//(感覺這句話 理解起來有點突兀,為什麼 不是 指向 p[3] 畢竟 …)

//p 是乙個由返回整型資料的指標所組成的陣列

p[3]看成 整體

int * a ,a就是乙個指標,指向int

p[3] = a,看成賦值語句,說明p是乙個陣列,陣列 元素為指標。

合起來: p是乙個陣列,陣列 元素為指標。

int (*p)[3];

(*p)看成 整體

int  a[3] 是乙個陣列,說明a 是乙個int [3] 陣列,

*p=a ,看成賦值語句,說明 p 指向了a,*p就是 解指標p 可以接受陣列 int[3]

合起來: p 指向了乙個陣列,陣列有3個 元素,元素型別為int

int **p;

//首先從p 開始,先與*結合,說是p 是乙個指標,然

//後再與*結合,說明指標所指向的元素是指標,然

//後再與int 結合,說明該指標所指向的元素是整

//型資料.由於二級指標以及更高階的指標極少用

//在複雜的型別中,所以後面更複雜的型別我們就

//不考慮多級指標了,最多隻考慮一級指標.

沒什麼好說的

int p(int);

//從p 處起,先與()結合,說明p 是乙個函式,然後進入

//()裡分析,說明該函式有乙個整型變數的引數

//然後再與外面的int 結合,說明函式的返回值是

//乙個整型資料

沒什麼好說的

int * p(int)

int * a; a 是乙個int指標

a = p(int)  ;看成函式呼叫賦值語句,那麼p 是乙個函式 ,返回值為a

合起來: p 是乙個函式,接收乙個int 型引數,返回值乙個 int 指標

int (*p)(int);

(*p) 是乙個整體

令 int (*p)(int) = int a(int);

那麼 a 是乙個函式,函式接收乙個int 返回乙個int

a = (*p) 看成呼叫語句行不通,沒關係就反過來,   

(*p)=a , 看成賦值語句,

p是乙個函式指標 ,因為解應用後可以接收a

合起來:p是乙個函式指標 ,函式接收乙個int 返回乙個int

int *(*p(int))[3];

令 int *(*p(int))[3]    = int * a [3]

那麼a是乙個陣列 ,陣列元素為 int 指標

a = (*p(int)) ,能看成呼叫語句吧。(因為a是乙個陣列,函式不能直接返回,這裡通過返回指標所以p前面有個*)

p 是乙個函式 ,返回乙個指標,解引用後,就是陣列a

合起來:p 是乙個函式,接收乙個int 引數,返回乙個指標,指向陣列,陣列有3個元素,元素是 int * 指標

注意 (*p(int)) 裡的 * !!!

int * (fun1(int para1,int para2))[4];  ## err

這個 fun1就是 直接返回陣列了,但是c/c++ 函式是不能直接返回陣列的,(只能用 struct/class 包裝,或是使用c++11的std::array。)

int *(* (*p)(int))[3];

p 是乙個函式指標,這個函式接收乙個int 引數,返回乙個指標,指向陣列,陣列有3個元素,元素是 int *

int  (*p(int))[3];

p 是乙個函式,接收乙個int 引數,返回乙個指標,指向陣列,陣列有3個元素,元素是 int  

int ia[3][4]

int (&row)[4]= ia+1 // 這個是對整個陣列的引用

int& row[4]= ia+1 // 元素為引用的陣列,這個是不存的,編譯通不過

c指標陣列與陣列指標與指標函式與函式指標筆記

include include typedef struct t ooxx t ooxx,pt ooxx 測試陣列指標 void test ooxx arrayp t ooxx p int num 測試指標陣列 void test ooxx parray t ooxx p,int num 測試函式指...

c語言陣列與指標,函式與指標

學過c語言的人都知道,指標是c語言中比較複雜難理解的乙個知識點,想要理解透徹有些難度,所以在此辨析一些容易混淆的概念,整理了有關指標的知識點。首先,先來看幾個概念。指標變數存放位址的變數。變數指標 變數的位址。所以,我們常常聽到定義乙個指標,實際上是定義乙個指標變數,而不是定義乙個指標,指標既然是位...

C語言 函式指標 函式指標陣列 函式指標陣列的指標

1.定義理解 函式的位址可以通過取位址函式名拿到,也可以通過函式名直接拿到。2.函式指標 1 定義乙個函式test void test char str intmain 2 函式指標的使用 呼叫函式test,傳參 zhangsan p zhangshan 這裡的 沒有起作用,它是讓我們知道這是乙個指...