Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wskaznik jako argument funkcji ? Wskazywanie wartości wewnątrz funkcji

Ostatnio zmodyfikowano 2017-02-25 21:49
Autor Wiadomość
unbearable0
Temat założony przez niniejszego użytkownika
Wskaznik jako argument funkcji ? Wskazywanie wartości wewnątrz funkcji
» 2017-02-25 20:36:48
Hej!
Posiadam w osobnym pliku .cpp funkcje typu string jej argumentem jest wskaźnik. Wszystko się ładnie kompiluje ale w momencie przypisania *wsk = x; wyrzuca błąd, który zamyka konsole. Czy to można tak zrobić, jak tutaj próbuje czy trzeba podawać argument i przez referencje zwracać ?

C/C++
int * ile_tekstu_wsk;

int main()
{
    wczytaj_text( ile_tekstu_wsk );
    cout << * ile_tekstu_wsk;
}

string wczytaj_text( int * wsk )
{
    string dane;
    int x;
    cout << "Podaj tekst, ktory chcesz przetlumaczyc: ";
    getline( cin, dane );
    x = dane.length();
    cout << "tutaj ok" << endl;
    * wsk = x; // blad
    cout << "tutaj juz nie" << endl;
    return dane;
}

P-158293
mateczek
» 2017-02-25 20:57:00
nie masz zarezerwowanej pamięci na wskaźnik. Lub wskaźnik na nic nie pokazuje
tak
C/C++
#include<iostream>
#include<string>
using namespace std;

string wczytaj_text( int * wsk )
{
    string dane;
    int x;
    cout << "Podaj tekst, ktory chcesz przetlumaczyc: ";
    getline( cin, dane );
    x = dane.length();
    cout << "tutaj ok" << endl;
    * wsk = x; // blad
    cout << "tutaj juz nie" << endl;
    return dane;
}

int main()
{
    int ile_tekstu;
    string dane = wczytaj_text( & ile_tekstu );
    cout << ile_tekstu << " " << dane;
    return 0;
}


lub tak:
C/C++
#include<iostream>
#include<string>
using namespace std;

string wczytaj_text( int * & wsk )
{
    string dane;
    wsk = new int; // przed wpisaniem do wskaźnika musi na coś pokazywać !!!
    cout << "Podaj tekst, ktory chcesz przetlumaczyc: ";
    getline( cin, dane );
    cout << "tutaj ok" << endl;
    * wsk = dane.length();
    cout << "tutaj juz nie" << endl;
    return dane;
}

int main()
{
   
    int * ile_tekstu_wsk; // wewnątrz funkcji zarezerwujesz pamięć, na którą pokaże wskaźnik
    string dane = wczytaj_text( ile_tekstu_wsk );
    cout << * ile_tekstu_wsk << " " << dane;
    delete ile_tekstu_wsk;
    return 0;
}
P-158294
unbearable0
Temat założony przez niniejszego użytkownika
odp
» 2017-02-25 21:14:11
Super działa !
Pierwszy raz widzę taki sposób (int * &wsk) czy to jakoś się fachowo nazywa ? Teraz dopiero jak na to patrze to zaczynam rozumieć ten napis, w końcu chce przekazać oryginalny wskaźnik.
A jeszcze jedno czy wypada pisać delete ile_tekstu_wsk; skoro jest na początku wsk = new int; ??
dziękuje :)
P-158295
mateczek
» 2017-02-25 21:49:10

Pierwszy raz widzę taki sposób (int * &wsk)

jeśli chcesz ustawić wskaźnik w funkcji, lub zmienić zmienną, na którą pokazuje wskaźnik. To wygodnie jest przekazać wskaźnik przez referencję.  Wówczas funkcja może go zmienić bo pracuje na orginale.

A jeszcze jedno czy wypada pisać delete ile_tekstu_wsk; skoro jest na początku wsk = new int; ??
dziękuje :)

jest new musi być delete aby nie było wycieków pamięci. Możesz poszukać info na temat inteligentnych wskaźników a wtedy zwalnianie pamięci będzie automatyczne
P-158296
« 1 »
  Strona 1 z 1