int p 與int p 有什麼區別?

時間 2021-06-08 22:34:18

1樓:Tracy Liang

前面的int (*p) () ;p是函式指標,p指向了乙個函式形式為int function (); 的位址。

後面的int* p() ;那麼p是乙個函式,函式返回值是int*。但是函式沒有具體實現,只是個宣告,或者在另外的地方實現。或typedef int* p();才能編譯通過。

建議*跟型別靠近,語義更清晰。

2樓:Ethson Liu

如何看懂這兩種寫法是有一些規則的,在國內經常叫做右左法則。我有翻譯過這類文章,希望你靜下來看一看,

讀懂 C 的型別宣告(譯) - 劉毅的網路日誌

3樓:qin meng

int (*p)()是乙個名字為p的函式指標的宣告,函式型別為參數列為空,返回值為int型的乙個函式。

int *p()是乙個名字為p的函式宣告,函式型別為參數列為空,返回值為int指標的。

簡單說乙個是函式指標宣告,乙個是函式宣告。

需要注意,如果:

int (*p1)();

int *p2();

p1 = p2;

這是不行的,編譯會報錯,因為p1跟p2的函式原型不一致,p1的返回值是int,p2的返回值是個int指標,需要這樣:

int (*p1)();

int p2();

p1 = p2;

4樓:裴浩

見下面的注釋:

// 從內向外,p 遇到的第一層括號,(*p),意味著 p 是個指標,指向外面的資料型別

// 括號左右均有表示式,因此 p 指向的是個函式,左邊是 int,即返回值,右邊是空列表 (),因此:

// p 是個指向函式的指標,該函式不接收輸入引數,返回 int

int(*p

)();

// 從內向外,p 沒遇到括號,p 的左右均有表示式,因此 p 是個函式

// 左邊是 int*,因此返回指向 int 的指標,右邊是空列表 (),即不接收輸入引數

int*

p();

更複雜的表示式也可以用從內到外的方式來解讀,比如:

// 第乙個括號:(p),和 p 等價(這個括號純屬干擾,可以不加)

// 第二個括號:(* [3]),左邊是 *,右邊是 [3],說明 p 是乙個陣列,陣列元素是指標

// 沒有括號了,左邊是 void,右邊是 (int),說明指標指向乙個函式,函式返回 void,接收 int 輸入

void(*

(p)[3

])(int

);怎麼用呢,舉個例子,給出下面三個函式:

voidf1(

intx

)voidf2(

intx

)voidf3(

intx

)那麼你可以按喜好給陣列 p 賦值,比如:p[

0]=&

f2;p[

1]=&

f0;p[

2]=&

f1;// 之後呼叫 p[0](100) 就相當於呼叫 f2(100),p[1] 和 p[2] 類似

嗯,陣列讀起來比較麻煩,不用陣列:

// 第一層括號 (*q),說明 q 是個指標

// 第二層括號,左邊的是 *,右邊的是 (int),說明 q 指向的是乙個函式,輸入引數為 int,返回值為指標

// 沒括號了,左邊的是 void,右邊的是 (int),說明指標(上一步的返回值)輸入引數為 int,返回值是 int

void(*

(*q)(

int))(

int);

怎麼用呢?復用上面的 f1 f2 f3,編寫函式:

using

Func

=void(*

)(int

);// getFunc 輸入引數是 int,返回乙個函式指標,其型別為 Func

// Func 返回 void,輸入引數是 int。

Func

getFunc

(inti)

elseif(

i==0)

else

}可以發現 getFunc 的型別和 q 指向的函式型別匹配。之後 q 就可以指向這個函式了:q=

&getFunc

;// q(-1)(1) 相當於呼叫 f1(1),q(0)(1) 相當於呼叫 f2(1),q(1)(1) 相當於呼叫 f3(1)

對了,順帶一提,將函式賦值給函式指標時,其實可以忽略取位址符,比如 q = getFunc 就可以了,因為函式會被隱式轉換成函式指標。 我這裡加取位址符 & 只是為了區分函式和函式指標。

INTP和ISTP有什麼區別?

istp 和感興趣的物互動 intp 和感興趣的人 比如自己 進行感興趣的概念的互動istp 創造者,對加工與改造具體物感興趣intp 將自己看作工藝品,對加工完善自己感興趣 知乎斯坦 測了幾個能回答的測試,istp,而且很明顯,敘述很像,我這個人現在是反感下定義和貼標籤的,很多題我選的模稜兩可,i...

istp和intp有什麼區別?

1.istp話超級少,不管感不感興趣,都不會滔滔不絕的說。intp話題對了比較能說吧。2.外形上差很多啊,istp會比較酷,intp能穿的不奇怪已經是盡了力了。尤其是未成熟期,intp會穿有趣的衣服,會扎眼 3.istp基本都玩遊戲,intp玩的應該不多4.intp可能比起istp來顯得呆,熟了可能...

mbti中,T和F有什麼區別,intp和infp怎麼區分?

intp 乙個 ti ne si fe 乙個 fi ne si te 同一件事情看的地方不一樣 新冠肺炎intp都在推測某些事情的經過 infp基本都在說這個世界怎麼了 兩者對人際關係都不是很容易進入 但intp並不怎麼感冒,infp比較渴求真正的愛情與友情intp想得多,思考複雜理論。在es和is...