przekazywanie tablic do funkcji

0

Załóżmy, że tworzymy tablice, której każdym elementem jest inna tablica (wymiar pierwszy znamy):

 
//1 spośób
int (*w)[10] = new int[size][10];
//2 sposób
int *w[5];
for(int i = 0; i < 5; ++i)
{
     w[i] = new int[10];
}
//deklaracja funkcji przyjmującej 1 tablice
void (int (*w)[10])
//deklaracja funkcji przyjmującej 2 tablice
void (int **w) // *w[] i tak zostanie zamienione na **w

Są jakieś różnice pomiędzy sposobami tworzenia powyższych tablic i wysyłaniem ich do funkcji ?

0

Zakładam, że jest to pytanie czysto teoretyczne, bo w praktyce byś użył klasy std::vector, std::array lub std::dynarray.

Sposób pierwszy to wskaźnik na tablicę 10 intów (lub tablicę tablic 10 intów). Jako, że jest to jedna tablica, będzie ona ułożona w pamięci w sposób ciągły i nie da się podmienić jej zawartości inaczej niż przez skopiowanie wartości (czyli nie da się zrobić w[3] = w[2]). Można za to podmienić wartość "głównego" wskaźnika.

Sposób drugi spowoduje utworzenie tablicy 5 wskaźników na int (lub tablicę intów). Nie da się nadpisać całej tablicy jednym przypisaniem, natomiast bezproblemowo można zmienić jej poszczególne elementy, ponieważ nie są to tablice, a wskaźniki (tj. w[3] = w[2] jest możliwe, wtedy oba wskaźniki będą wskazywać na to samo miejsce w pamięci). Wkaźniki mogą wskazywać na tablice o różnej długości.

1 użytkowników online, w tym zalogowanych: 0, gości: 1