witam, mógłby mi ktoś wyjaśnić dlaczego gdy przekazuje tablice dynamiczną do funkcji i gdy użyje funkcji sizeof(tablica) i podziele przez sizeof(int) to pokazuje rozmiar 1 ?? sizeof(tablica) / sizeof(int) używam żeby poznać rozmiar tablicy, równie dobrze mogę zmienną n przekazać do funkcji ale chcę wiedzieć dlaczego ten sposób nie działa.
#include
#include
void czyszczenieEkranu (void);
void losuj (int tablica[]);
int main (void)
{
int ile;
int *tablica;
czyszczenieEkranu ();
printf ("program losuje n podanych liczb i zapisuje je do tablicy\n");
printf ("ile liczb chcesz wylosowac ?? n= ");
scanf ("%d", &ile);
tablica = (int *) malloc (ile * sizeof (int));
losuj (tablica);
free (tablica);
return 0;
}
void czyszczenieEkranu (void)
{
system ("clear");
}
void losuj (int tablica[])
{
int i;
int ile = (sizeof (tablica)) / sizeof (int);
printf ("tablica zawiera miejsca na %d elementow\n", ile);
srand (time (NULL));
for (i = 0; i < ile; i++)
{
tablica[i] = rand () % 100;
}
printf ("elementy w tablicy:\n");
for (i = 0; i < ile; i++)
{
printf ("%d ", tablica[i]);
}
printf ("\n");
}
Bo rozmiar tablicy alokowanej dynamicznie nie jest przechowywany w “dostępnym” miejscu, więc przekazujesz tylko wskaźnik(który na systemach 32-bitowych ma 4B czyli sizeof(int)) na zaalokowaną pamięć. Taka specyfika języka.
* - można użyć funkcji, która pobierze rozmiar pamięci, ale wtedy trzeba użyć funkcji specyficznych dla alokatora(czyli w sumie systemu operacyjnego). Dla Windows to będzie jedna z tych:
próbowałem również przekazać adres tablicy a później za pomocą “*” dobrać się do tablicy ale to też nic nie daje bo wskazuje na pierwszy element a nie na całą tablice