1樓:嵌入式Linux
int *((*i)())[5]
(*i)() 這個我覺得大家應該沒有不知道的,這個是乙個指標,這個指標指向於乙個沒有引數的函式。
但是函式需要返回值
現在就是要確定函式的返回值
(*i)() 把這一坨替換成Y
int * (Y)[5] 可以看出函式的返回值是乙個陣列,這個陣列裡面的值是 5個指標
但是C語言函式可以返回陣列嗎?
我之前的文章也寫過
C語言函式為什麼不能返回陣列?
如果改成C++ 11可以嗎?
好像也是不行的,所以這個只是用來學習語法研究用。
2樓:nnnn123456789
c/c++遵循原則:
1. 怎麼定義就怎麼使用
2. 使用時遵循運算子優先順序。
那麼我們來看,i最近的是*i,再外一層是(*i)(),說明i是個函式指標。
把它拆開,temp = (*i)(), int* (temp)[5]
這樣就好理解多了。首先它是乙個函式指標,呼叫空引數,返回乙個型別為int* [5]的變數。
3樓:Mimosa
int *((*i)())[5];
在MSVC裡編譯,出現如下錯誤:
error C2090: function returns array
應該是要表達如下的表示式吧?
int * (* i [5]) ();
事實上,可以分成兩步等效的宣告:
typedef int * (*my_pfn)();
my_pfn i[5];
這樣,把原本複雜、錯誤的宣告,變成簡單的事了!
C/C++是難學、還是好學,掌握程度等,往往區別就在這些細節上。如果達到相應的C水平,使用簡潔、但是含義不簡單的合成宣告。如果C的水平不怎樣,就乖乖使用含義簡單的兩步宣告程式。
4樓:
看到這個想起來以前在學校寫了個三行的指標宣告讓同學看,誰看出來了有獎。
反正最後是乙個陣列指標,元素是接收元素是函式指標的陣列指標並且返回乙個更複雜我也忘記是什麼複雜型別的函式指標。
反正套娃。
5樓:BlueWanderer
除了參數列所有括號右邊的東西挪到括號左邊去int *((*i)())[5] -> int*[5]()*i然後從右往左看
*i首先i是個指標
()*i指向的是乙個函式,參數列是空的
[5]()*i函式返回乙個5個元素的陣列(!?)*[5]()*i陣列元素是指標
int*[5]()*i指標指向int
也就是宣告了乙個i,i是指向乙個沒有引數,返回乙個5個指向int類行的指標構成的陣列的函式的函式指標。
然鵝C/C++裡函式不能返回陣列...
6樓:
int *((*i)())[5];
declare i as pointer to function returning array 5 of pointer to int
C gibberish English
7樓:邱昊宇
原理同《c語言如何判斷乙個宣告到底是函式還是指標還是陣列還是什麼東西?》
從 i 開始:i is a ...
最裡面是 *i
右邊沒東西
左邊是個 *:... pointer to
去掉一層括號是 X()
右邊是個():... a function that returns ...
左邊沒東西
去掉一層括號是 int *X[5]
右邊是個[5]:... an array of...
左邊是個 int *:pointer to int
所以完整的就是:i is a pointer to a function that returns an array of pointer to ints
翻譯一下:i 是個指向函式的指標,函式返回值是 int 指標的陣列。
然後組織語言的時候自行發揮把函式引數啊、陣列長度之類的往合適的地方塞就行。
如何理解 C 中 int i 的宣告方式?
我的偏好,當定義指標型別物件的時候,比如你的例子,我寫成int a,理由,為了統一,好記,int 是型別名,a是變數名.指標是復合型別,不同型別復合出的指標型別型別不同。 Shark 個人偏好把int 看做乙個整體,把i作為變數,實際上這也符合從右向左看的原則。至於int i的寫法,我認為可以理解為...
如何理解c c 語言的宣告以及型別?
iCAPCOM int a可理解為 int a,也可以理解成int a,對編譯器來說沒有區別。都是說 a的資料型別是指向int型的指標,指標是一種變數 可理解這個指標a是乙個箭頭指向乙個變數所在的記憶體位址 int a表示指標a是乙個箭頭指向乙個變數所在的記憶體位址,這個位址儲存的變數也是乙個箭頭指...
如何理解few shot learning中的n way k shot?
以分類問題為例 few shot問題的定義是對於某乙個資料集,訓練集中每乙個類別的樣本數量都很少,比如一共有10個類,每個類別只有5個樣本。那麼如何訓練乙個神經網路來對這個資料集進行分類呢?乙個直接的做法就是,就像常規的分類模型一樣,用這50個樣本進行訓練 10個類別,每個類別5個樣本 那麼這麼做會...