Wskaznik jako argument funkcji ? Wskazywanie wartości wewnątrz funkcji
Ostatnio zmodyfikowano 2017-02-25 21:49
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ć ? 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; cout << "tutaj juz nie" << endl; return dane; }
|
|
mateczek |
» 2017-02-25 20:57:00 nie masz zarezerwowanej pamięci na wskaźnik. Lub wskaźnik na nic nie pokazuje tak #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; 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: #include<iostream> #include<string> using namespace std;
string wczytaj_text( int * & wsk ) { string dane; wsk = new int; 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; string dane = wczytaj_text( ile_tekstu_wsk ); cout << * ile_tekstu_wsk << " " << dane; delete ile_tekstu_wsk; return 0; } |
|
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 :)
|
|
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 |
|
« 1 » |