Zwracanie tablicy przez funkcję

0

Witam, chciałbym was - drodzy użytkownicy spytać dlaczego dzieje się tak a nie inaczej z moim programem, na początek może przedstawię sam kod źródłowy

#include <iostream>

using namespace std;

int Wpis_do_tablicy(int ile, int tablica[]);

main(){
    const int rozmiar = 3;
    int tablica[rozmiar];
    Wpis_do_tablicy(rozmiar, tablica);
    return 0;
}

//Funkcja wpisująca wartości do tablicy
int Wpis_do_tablicy(int ile, int tablica[])
{
    cout << "Prosze o podanie elementow tablicy " << ile << " elementowej\n\n"; 
    for(int i=0; i < ile; i++)
    {
        cin >> tablica[i];
    }
    return tablica;     
}

Prosty w działaniu program, który ma za zadanie wprowadzanie do tablicy danych, lecz kompilator sygnalizuje mi błąd

C:..\Return_tablica.cpp In function `int Wypis_do_tablicy(int, int*)':
C:..\Return_tablica.cpp invalid conversion from int*' to int'

Dlaczego funkcja nie zwraca adresu tablicy? w końcu nazwa tablicy to adres jej zerowego elementu czyż nie? Wiem że problem ten dość prosto rozwiązać za pomocą wskaźników. Szperałem i za każdym razem każdy sugeruje użycie wskaźników - czy to jedyna możliwość?

Moje pytanie jest czysto teoretyczne, coś mnie tchnęło i zacząłem się po prostu nad tym zastanawiać :) Proszę o wyrozumiałość w każdym razie =]

Z góry dziękuje.
Eldiane.

0

Ale przecież kompilator ci wyraźnie napisał w czym problem. Twoja funkcja zwraca int a powinna int* albo int[]!

w końcu nazwa tablicy to adres jej zerowego elementu czyż nie

nie, ale może być zrzutowana do takiego ADRESU. Podkreślam tu ADRES bo adresy przechowujemy we wskaźnikach...

0

Rozumiem i dziękuje za tak szybką odpowiedź :) Program zwraca teraz wskaźnik do obiektu typu int, kompilator nie zgłasza błędów, lecz po uruchomieniu pliku *.exe występuje coś dziwnego a mianowicie, podaję wartości tablicy, wszystko wydaje się piękne, ale gdy skończę podawanie elementów to program się zawiesza czego kompletnie nie rozumiem (tak jakby przy zwracaniu wskaźnika), może wina jest po stronie mojego laptopa? może coś knocę z kodem źródłowym?

Oto kod programu:

#include <iostream>
 
using namespace std;
 
int Wpis_do_tablicy(int ile, int tablica[]);
 
main(){
    const int rozmiar = 3;
    int tablica[rozmiar];
    Wpis_do_tablicy(rozmiar, tablica);
    return 0;
}
 
//Funkcja wpisująca wartości do tablicy
int Wpis_do_tablicy(int ile, int tablica[])
{
    int *wsk;
    
    cout << "Prosze o podanie elementow tablicy " << ile << " elementowej\n\n"; 
    for(int i=0; i < ile; i++)
    {
        cin >> tablica[i];
    }
    *wsk = tablica[ile];
    
    return *wsk;       
}

Z góry dziękuje.
Eldiane.

1
    *wsk = tablica[ile];
 
    return *wsk; 

tablica[ile] nie istnieje. Jeżeli ile = 3 to tablica ma indeksy 0, 1, 2. tablica[3] jak widzisz nie istnieje. Jeżeli chcesz zwrócić wskaźnik z tej funkcji:

int *Wpis_do_tablicy(int ile, int tablica[])
  // kod wczytywania
  return tablica; 
}
1

@Eldiane proponuje żebyś doczytał sobie jednak o wskaźnikach bo stawiasz gwiazdki zupełnie losowo...

0

Dziękuje za wszystkie odpowiedzi, już biorę się za czytanie :)
Eldiane.

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