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

Funkcja otrzymująca jako argument referencję

Ostatnio zmodyfikowano 2015-10-02 15:49
Autor Wiadomość
Gokazi
Temat założony przez niniejszego użytkownika
Funkcja otrzymująca jako argument referencję
» 2015-10-02 11:46:30
Cześć, czy moglibyście mi pomóc w utworzeniu funkcji:

"XXX" która otrzymuje jako argument referencję ref do zmiennej typu wskaźnik i dokonuje przypisania ref.wsk=wsk ??


Przy okazji powiedzcie czy dobrze zrobiłem tą funkcję:

"zwolnij" zwalnia obszar pamięci wskazywany przez pole wsk i nadaje temu polu wartość NULL.


void zwolnij()
{
   free(wsk);
   wsk=NULL;
}

Z góry dziękuję za pomoc.
P-138111
mateczek
troszkę bez sensu!!! (przepraszam bo źle zrozumiałem!!!)
» 2015-10-02 13:37:05
Oczywiści przekazywanie wskaźników przez referencję nie ma sensu.  Ale jeśli chcesz go zmienić w funkcji jak
słusznie zauważyła Lora to można to zrobić jak poniżej

C/C++
#include <iostream>

using namespace std;
void func( int * & w, int & ref ) {
   
    w = & ref;
}
int main() {
    int liczba1 = 10, liczba2 = 20;
    int * wsk = & liczba1; //wskaźnik pokazuje na liczba1
    cout <<* wsk << endl; //wyświetla liczba1
    func( wsk, liczba2 ); //funkcja przestawia wskaźnik na liczba2
    cout <<* wsk << endl; //wyświetla liczba2
}


//ok Lora źle zrozumiałem!!! i poprawiłem przykład !!!
P-138112
Lora
» 2015-10-02 13:42:22
On chyba chce w tej funkcji zmienić adres na jaki ten wskaźnik wskazuje. W takim przypadku przekazanie przez referencję ma sens.
P-138113
Gokazi
Temat założony przez niniejszego użytkownika
» 2015-10-02 15:26:01
Dzięki wielkie za pomoc, tak chodziło mi o to co napisała Lora:)
Pomożecie jeszcze w 2 pytaniu?
P-138114
carlosmay
» 2015-10-02 15:29:30
W jaki sposób alokowana byłą pamięć?
P-138115
Gokazi
Temat założony przez niniejszego użytkownika
» 2015-10-02 15:32:50
pola wsk? po prostu:

int *wsk;
P-138116
carlosmay
» 2015-10-02 15:41:04
Z tym nic nie robisz.
Jeśli alokujesz pamięć malloc() lub new to musisz ją zwolinić.

np.
C/C++
int main() {
   
    int * wsk;
    wsk = new int; // dynamiczna alokacja pamięci i przypisanie do wskaznika
    * wsk = 10; // przypisanie wartości pod adresem wskaznika
   
    cout << * wsk << endl; // wyłuskanie wartosci spod wskaznika
   
    delete wsk; // zwolnienie pamięci
    wsk = NULL; // ustawienie adresu wartością NULL, opcjonalne
   
    _getch();
}

Edit: Jeśli chcesz żeby zwalnianiem zajmowała się funkcja musisz przekazać do niej wskaźnik, na pamięć którą chcesz zwolnić.
P-138119
carlosmay
» 2015-10-02 15:49:11
P-138120
« 1 »
  Strona 1 z 1