2013-03-07 13 views
5

Chcę wiedzieć, jaka jest różnica międzyPointer vs Array w definicji funkcji: jaka jest różnica między void fct1 (int * p) a void fct1 (int p [])?

void fct1(int *p) 

i

void fct1(int p[]) 

wiem, że oba wskaźniki, ale czy są jakieś różnice

+1

@ Mark Ransom dziękuję za szybką odpowiedź. ale słyszałem, że int p [] jest stałym wskaźnikiem, więc adres, który wskazuje nie może być zmieniony, czy to prawda? – user2142328

+0

("wskaźniki funkcji" są wskaźnikami funkcji, a nie funkcjami, które pobierają wskaźniki. Z tego powodu, jestem pewien, że to * musi * być duplikatem.) –

+1

@ user2142328 'p []' deklaruje tablicę o rozmiarze do być później zdeterminowany. Byłoby to nielegalne w parametrze funkcji, którego rozmiar musi być natychmiast znany. W tym kontekście jest traktowany specjalnie, uzyskując natychmiastową transformację do '* p'. – Potatoswatter

Odpowiedz

8

Nie ma absolutnie żadnej różnicy, gdy używana jako funkcja taki parametr. Kompilator traktuje obie formy w identyczny sposób.

2

Nie ma różnicy. Dla kompletności, oto co średnia mówi:

C99 standardowy 6.7.5.3 sekcja 7

deklaracja parametru jako „” tablicy typu „” powinny być dostosowane do „” wykwalifikowanego wskaźnik do typ '', ...

Powiązane problemy