Cześć, mam takie pytanie.
Mam 2 fragmeny kodu robiące identycznie to samo.
Ze zwracaniem wskaźnika.
int *reverseTab(int &tablicaKopia){
int *ptr = &tablicaKopia;
for (int i = 0, j = 10; i < 10; i++, j--)
ptr[i] = j;
return ptr;
}
Wywołanie:
int tablica[10];
int wsk*;
...
wsk = reverseTab(tablica[0]); //lub *tablica
...
Bez zwracania wartości:
void reverseTab (int &tablica){
int *ptr = &tablica;
for (int i = 0, j = 10; i < 10; i++, j--)
ptr[i] = j;
}
Wywołanie:
int tablica[10];
int wsk*;
...
reverseTab(tablica[0]); //lub *tablica
for (int i = 0; i < 10; i++)
cout << tablica[i] << endl;
...
Moje pytanie się tyczy tego czy w tym wypadku jest w ogóle sens zwracać wskaźnik?
No bo w sumie przesyłamy adres tablicy, wykonujemy na niej operacje i już w pamięci te dane się zmieniają bo nie jest tworzona żadna kopia tej tablicy, a nawet jak by sobie kopie stworzył w samej funkcji to zostanie ona zniszczona po zakończeniu funkcji.
Gdybyśmy chcieli do funkcji przesłać sobie kopię naszej tablicy, a następnie utworzyć np. drugą tablicę tablica2 w której umieścilibyśmy wynik odwracania to tablica2 musi być globalna prawda? Albo tworzyć wskaźnik na tablica2 jako zmienną lokalną w ciele main i razem z tablica przekazywać go do funkcji, a później zwracać? Dobrze myślę czy źle?
Może i to takie pierdoły ale będę wdzięczny za odpowiedź.
Czy oba fragmenty kodu są poprawne i można je używać tożsamo?