C++ Przekazywanie tablicy do funkcji przez wskaźniki - błąd

Po kompilacji mojego programu występuje następujący błąd podczas kompilacji:

[Error] cannot convert ‘int (*)[20000]’ to ‘int*’ for argument ‘3’ to ‘int LiczbaRoku(int, int, int*, int*)’

Przykład

Wejście:

5

2 1 7 3 2

2

8

11

Wyjście:

3

1

#include 

using namespace std;


int LiczbaRoku(int n, int m, int *tab1, int *tab2)

 {

 	int dzielniki=0;

 	for (int i=0;i
 	{

 		for (int j=0;j
 		{

 			if (tab1[i]%tab2[j]==0) 

 			{

		 		dzielniki++;

		 	}


 		}



 	}

 	return dzielniki;

 }


int main()

{

    int n,m,A[20000], B[10];

    cin>>n;

    for (int i=0;i>A[i];

    cin>>m;


    for (int i=0;i>B[i];


    cout<

  	return 0;  


}

Kiepsko pamiętam C++, ale funkcja LiczbaRoku przyjmuje wskaźnik na tablicę, a ty przez &A przekazujesz adres (chyba jako zwykłą liczbę) tablicy. Wskaźnikiem na tablicę (czy raczej pierwszy element) jest sama jej nazwa (zwyczajne A ).

Potwierdzam powyższe. Zastanawia mnie tylko po co się w to bawić (przekazywanie jako argument) przy zadaniach czysto algorytmicznych. Zrób tablicę globalną i do przodu.

PS

Twój algorytm nie zwróci oczekiwanego wyjścia.

PS2

Można to zrobić lepiej niż O(m*n).

No no no, poradzenie sobie ze zmiennymi lokalnymi raczej jest łatwiejsze niż poradzenie sobie z ew. błedami ze zmiennymi globalnymi. Z reguły niezależnie co robisz trzeba stawiać na zmienna lokalne. Oraz tak, nazwa tablicy jest wskaźnikiem na jej pierwszy element.

Nie wątpliwie jest to potrzebne przy napisaniu kodu dla komputerowego sędziego, który odpowie ile liczb z multizbioru A dzieli każdą z liczb ze zbioru B… Zresztą powyżej masz dowód empiryczny, że dla prostego programu, łatwiej jest zrobić zmienne globalne i napisać to szybko i “bez udziwnień”, tak aby algorytm był poprawny, więc o czym dyskutujemy?

Odrobina poprawności politycznej w C++ nie zaszkodzi. Zresztą algorytmy prędzej czy później przestaną być tylko celem samym w sobie i problemem stanie się ich zaimplementowanie w konkretnym programie, lepiej zatem zaczać pisać tak wcześnie jak się da.

kostek135 , mowa tu o tym że twoja rada “Zrób tablicę globalną i do przodu.” jest słuszna dla SPOJ’a lub podobnych tworów, ale generalnie dla C/C++ to jest bardzo zła rada. Więc kiedy dajesz taką dobrą radę warto dopisać Nie próbuj tego w domu!