Zamiana liczb z użyciem wskaźników.

0

Witam wkroczyłem właśnie w temat wskaźników i mam napisać program który ma posiadać funkcje która otrzymuje dwa wskaźniki do dwóch zmiennych typu int i ta funkcja ma zamienić ze sobą wartość wskazanych zmiennych. I napisałem taki program, działa liczby są zamieniane tylko na sam koniec wyświetla się ciąg liczb zgaduje że jest to jakiś adres w pamięci tylko właśnie nie wiem czemu on się tam wyświetla. Prosił bym o wyjaśnienie czemu tak się dzieje.

#include<iostream>
#include<cstdlib>
using namespace std;


int zamien_liczby(int*wskaznik_liczba_1, int*wskaznik_liczba_2);

int main()
{
    int liczba_1, liczba_2;
    cout << "Podaj dwie liczby a ja zamienie je miejscami. " << endl;
    cin >> liczba_1 >>  liczba_2;

    cout << "Przed zamiana liczba jeden jest rowna: " << liczba_1 << " a daruga liczba wynosi:  " << liczba_2 << endl;
    cout << "A po zamianie liczby wynosza: " << zamien_liczby(&liczba_1, &liczba_2) << endl;


}

int zamien_liczby(int*wskaznik_liczba_1, int*wskaznik_liczba_2)
{
    int pom = *wskaznik_liczba_1;
    *wskaznik_liczba_1 = *wskaznik_liczba_2;
    *wskaznik_liczba_2 = pom;

    cout << "Po zamianie pierwsza liczba wynosi " << *wskaznik_liczba_1 << " a druga liczba wynosi " << *wskaznik_liczba_2 << endl;
}
5

Funkcja zmien_liczby() jest zadeklarowana, że zwraca coś co ma typ int, natomiast nic nie zwracasz, dlatego możesz tam mieć jakąś wartość z rejestru / pamięci.
Warto używać flag kompilacji takie jak "-Wall -pedantic", wtedy kompilator powinien wyświetlić odpowiednie ostrzeżenie.

4

czy jest to zgodne z treścią zadania.

funkcja

int zamien_liczby(int*wskaznik_liczba_1, int*wskaznik_liczba_2)
{
    int pom = *wskaznik_liczba_1;
    *wskaznik_liczba_1 = *wskaznik_liczba_2;
    *wskaznik_liczba_2 = pom;

    cout << "Po zamianie pierwsza liczba wynosi " << *wskaznik_liczba_1 << " a druga liczba wynosi " << *wskaznik_liczba_2 << endl;
}

jest niezgodna z treścią zadania bo oprócz tego że zamienia to jeszcze wypisuje. A powinna tylko zamieniać. Wypisywanie powinieneś umieścić gdzie indziej

0

Wywal, drukowanie z funkcji, (drukuj za wywołaniem) i zmień deklarację na void, chyba, że potrzebny Ci jakiś kod błędu do zwrotu.

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