W C++ (a także w C), parametry zadeklarowane z typem tablicy zawsze natychmiast zanikują do typu wskaźnika. Następujące trzy deklaracje są równoważne
void printValues(int nums[3], int length);
void printValues(int nums[], int length);
void printValues(int *nums, int length);
tj. rozmiar nie ma znaczenia. Jednak nadal nie oznacza to, że można tam użyć nieważnej deklaracji tablicy, tzn. Nie można na przykład określić ujemnego lub zerowego rozmiaru.
(BTW, to samo odnosi się do parametrów typu funkcji - to natychmiast rozpada się wskaźnik do funkcji typ.)
Jeśli chcesz wymusić dopasowanie rozmiaru tablicy między argumentów i parametrów, należy pointer- lub odniesienie typy -to-tablicy w deklaracji parametrów
void printValues(int (&nums)[3]);
void printValues(int (*nums)[3]);
oczywiście, w tym przypadku rozmiar staną się w czasie kompilacji stała i nie ma sensu przechodzenia length
więcej.
przez nieprawidłowy rozmiar, masz na myśli ujemny? – Potatoswatter
@Potatoswatter: tak, i zero – defectivehalt
Po prostu ciekawy, co się dzieje, jeśli robisz sizeof (nums)? –