Przeczytałem fragment kodu i stwierdziłem, że istnieje taka funkcja.co działa funkcja "int (* function()) [10];" oznaczać?
int (*function())[10]{
...
}
Jestem zdezorientowany. Co oznacza ta funkcja i co zwróci?
Przeczytałem fragment kodu i stwierdziłem, że istnieje taka funkcja.co działa funkcja "int (* function()) [10];" oznaczać?
int (*function())[10]{
...
}
Jestem zdezorientowany. Co oznacza ta funkcja i co zwróci?
Jest to definicja funkcji, która zwraca wskaźnik do tablicy składającej się z 10 liczb całkowitych.
Należy pamiętać, że zwracana wartość to wskaźnik, a nie faktyczna tablica. Tablic nie można zwrócić z funkcji. Zgodnie z pkt 8.3.5/8 Standard:
Funkcje nie mają typ zwracanej tablicy typu lub funkcji, chociaż mogą mieć typ zwracany typ wskaźnika lub odniesienie do takich rzeczy
Oto prosty przykład jak można go używać:
int arr[10]; // an array of 10 int
int (*ptr)[10]; // pointer to an array of 10 int
int (*function())[10] // function returning a pointer to an array of 10 int
{
return ptr;
}
int main()
{
int (*p)[10] = function(); // assign to the pointer
}
można to wykorzystać wszędzie tam, gdzie normalnie można użyć wskaźnika. Ale zauważ, że istnieją lepsze alternatywy niż wskaźniki w ogóle, jak std::shared_ptr<std::array<T, N>>
lub std::shared_ptr<std::vector<T>>
.
Czy to jest nawet przydatne? : - | Nie mam na myśli odpowiedzi, mam na myśli określenie, że zwracana wartość jest wskaźnikiem do tablicy o rozmiarze 10. –
@NikosC., Zwrócę 'std :: array
@NikosC. Tak, zwracamy wskaźnik jak każdy inny obiekt. Kolejną zaletą jest to, że kompiluje się tylko wtedy, gdy rozmiar tablicy wynosi 10, nie ma to miejsca. – 0x499602D2
Droga do odczytu jest znaleźć skrajną lewą identyfikator i swój sposób pracy na zewnątrz, pamiętając, że ()
i []
wiążą przed *
, więc *a[]
jest tablicą wskaźników, (*a)[]
jest wskaźnikiem do tablicy, *f()
jest funkcją zwracanie wskaźnika, a (*f)()
jest wskaźnikiem do funkcji. Tak więc,
function - function
function() - is a function
*function() - returning a pointer
(*function())[10] - to a 10-element array
int (*function())[10] - of int
Nigdy nie natrafiono na funkcje zwracające tablice (lub wskaźniki do tablic przed); "[]" po prawej stronie wygląda dziwnie. Sądzę, że następnym krokiem w złożoności byłoby zadeklarowanie wskaźnika do tej funkcji. –
Innym sposobem patrzenia na to jest zastąpienie 'function()' symbolem 'f', dając' int (* f) [10] '; teraz nie wygląda tak dziwnie. –
Oczywiście, czyni to logicznym sensownym pod względem składni; Po prostu możesz kodować przez lata bez natknięcia się na tę sprawę, to mnie zaskoczyło ... Myślę, że uczysz się czegoś każdego dnia;) –
oznacza to, że jest to wskaźnik funkcji i argument jest nieważny i powrót Int [10]
http://cdecl.org i http://c-faq.com/decl/ spiral.anderson.html – chris
Zobacz także samouczek dotyczący wskaźników funkcji, takich jak http://www.cprogramming.com/tutorial/function-pointers.html – user1929959
@ user1929959: ale wskaźniki funkcji nie mają nic wspólnego z niczym w pytaniu ? –