1樓:匿名使用者
我對char (*(*(*q)()))()的分析:
q是指向一個沒有引數的函式的指標,q所指向的函式返回一個陣列指標的指標,這個陣列中儲存了一些函式指標,這些函式指標可以指向沒有引數,並且返回值型別是char的函式
。分析應該由內向外進行:
(*q)()......q是一個無參函式的指標
*(*q)()......q指向的函式返回一個指標
接下來,為了方便起見,可以將原式中的*(*q)()由a代替:
char (*(a))();
繼續分析,
(a)....a是一個陣列(陣列元素的數量未知)
*(a).....a是一個指標陣列(即每個元素都是一個指標)
char (*(a))()....a是一個指標陣列,每一個元素都是一個函式指標,可以指向一個返回值型別是char的無參函式。
最後再來看看a代表的是什麼,a代表的是「q指向的函式返回一個指標」,也就是說:
q指向的函式返回的值就是另一個指標陣列的指標,這個指標陣列的每一個元素都是一個函式指標,可以指向一個返回值型別是char的無參函式。
至此,綜合以上分析得到的結論就是:
q是指向一個沒有引數的函式的指標,q所指向的函式返回一個陣列指標的指標,這個陣列中儲存了一些函式指標,這些函式指標可以指向沒有引數,並且返回值型別是char的函式。
2樓:匿名使用者
char*q是宣告一個指向於變數q的址針
char*(*q)是宣告一個指向於*q地址的址針^^^^^^
剩下的是什麼意思,樓主應該可以理解了吧
c語言,解釋下 char(*(*x()[5])() 的意思
3樓:匿名使用者
從內向外分析:
*x() : x是一個無引數函式,該函式返回一個指標*(*x())[5] : 由於c語言宣告的優先順序規則是字尾優先於字首,所以這裡就要先考慮後面的[5],再看前面的星號,於是得出:
x是一個無參函式,該函式返回一個指標,返回的這個指標指向一個有5個指標元素的陣列。
char(*(*x())[5])() : 依然先看字尾得知這是個函式,而且沒有引數,再看字首,結合字尾可知這是一個返回值型別為char的函式,再結合對*(*x())[5]的分析得出最後結論:
x是一個無引數函式,該函式返回一個指標,返回的這個指標指向一個有5個指標元素的陣列,該陣列的每個元素都可指向一個返回值型別是char的元素函式。
4樓:匿名使用者
typedef宣告自定義資料型別,配合各種原有資料型別來達到簡化程式設計的目的。對於char (*(*x())[5])(); 我們可利用typedef來簡化。
先定義:typedef char (*fun)(); 那麼:char (*(*x())[5])(); => fun (*x())[5];再定義:
typedef fun a[5]; 那麼:fun (*x())[5]; => a *x(); 對於這種形式正是我們最熟悉的函式宣告型別。
根據上面的簡化模式,可逐步描述char (*(*x())[5])();的含義:
第一步:a *x(); 宣告x是一個輸入引數為空且返回a的指標型別的函式。
第二步:fun (*x())[5]; 宣告x是一個輸入引數為空且返回指向含有5個fun型別陣列的指標的函式。
第三步:char (*(*x())[5])(); 宣告x是一個輸入引數為空且返回指向含有5個指向函式指標且返回值為字元型別的陣列指標的函式。
利用上述的方法,幾乎可以理解任何複雜型別的宣告,例如linux系統呼叫函式signal的函式原型如下:
void (*signal(int signo,void (*func)(int))) (int);
對於該函式原型,給人的第一感覺就是複雜,不知從何下手。其實同樣可以利用上面所講的typedef宣告來簡化:先定義typedef void (*sighandler_t)(int); 那麼void (*signal(int signo,void (*func)(int))) (int); => sighandler_t signal(int signo, sighandler_t handler);
對於sighandler_t signal(int signo, sighandler_t handler); 就和我們常見的函式宣告非常類似了,唯一不同的是sighandler_t不是我們常見的基本資料型別,假如你不知道sighandler_t具體是什麼型別,為了快速理解sighandler_t signal(int signo, sighandler_t handler);的含義,你可以把sighandler_t想象成為你最熟悉的int或char型別,對於int signal(int signo, int handler);你會很輕鬆的理解,對於sighandler_t signal(int signo, sighandler_t handler);你只需要瞭解sighandler_t的型別(即typedef void (*sighandler_t)(int);),就可以理解signal函式的完整原型宣告。
本文出自 「小麥」 部落格
5樓:國迎彤澄春
選a,陣列str中只有'\n'這個字元。
b是給2維陣列賦值的。
c,d表示法都是錯的。
人體受精的過程及其意義
是確保受精卵正常 所必需的卵內的先行變化,普遍存在於動植物界 調整發生在啟用之後,受精過程包括卵子啟用,但人們通常提到最多的是指的動物受精是卵子和精子融合為一個合子的過程。動物受精在細胞水平上,並恢復雙倍體。它是有性生殖的基本特徵,合成出胚胎髮育所需要的蛋白質 兩性原核融合起保證雙親遺傳的作用,受精...
怎樣理解唯物史觀?其意義如何
歷史唯物主義認為,歷史的所有事件發生的根本原因是物資的豐富程度,社會歷史的發展有其自身固有的客觀規律。認為 物質生活的生產方式決定社會生活 政治生活和精神生活的一般過程 社會存在決定社會意識,社會意識又反作用於社會存在 生產力和生產關係之間的矛盾 經濟基礎與上層建築之間的矛盾,是推動一切社會發展的基...
咖啡的名稱與意義,好聽的咖啡名和其意義。
好聽的咖啡名和其意義。最好是4個字的咖啡名,謝謝咧 多多益善啊 我來答作文小編 lv.18 2016 04 11 瑪莎克蘭,一種用熱咖啡,紅酒,還有肉桂棒調製出來的咖啡。講述的是 阿法 戰爭期間 阿拉伯和法國 一位阿拉伯軍人被敵軍困於城中,不抱仍何生存希望之時,一位名叫瑪莎克蘭的女子給他送來了一杯咖...