Wskazniki i adresy różnych zmiennych

0

Hej wiec tak mam tutaj taki o to program i mam problem poniewaz adresy A B C się nie pokrywaja z adresami wsk dla a b c dla wszystkich 3 zmiennych sa takie same a chcialbym zeby kazdy adres byl unikalny ze tak powiem... nie wiem jak to zrobic bo chcialbym dla kazdej zmiennej zachowac wskaznik o nazwie wsk

#include <iostream>
using namespace std;
int elo(float, float);
int elo1(float, float);
int elo2(float, float);
int main()
{
    float a, b, c;
    cout << "podaj wartosci A B i C"
         << "\n";
    cin >> a >> b >> c;
    cout << "wartosc A=" << a << "\n"
         << "wartosc B=" << b << "\n"
         << "wartosc C=" << c << endl;
    cout << "adres A=" << &a << "\n"
         << "adres B=" << &b << "\n"
                                "adres C="
         << &c << "\n";
    float w1 = elo2(a, b);
    float w3 = elo(c, a);
    float w2 = elo1(b, c);
    cout << w1 << "\n";
    cout << w3 << "\n";
    cout << w2 << "\n";
    system("pause");
}
int elo2(float a, float b)
{
    float* wsk = &a;
    cout << "adres zmiennej a za pomoca wskaznika " << wsk << "\n";
    cout << "wartosc zmiennej a za pomoca wskaznika " << *wsk << "\n";
    *wsk = *wsk + b;
    cout << "wartosc zmiennej A=" << a << "\n";
    return a;
}
int elo1(float b, float c)
{
    float* wsk = &b;
    cout << "adres zmiennej b za pomoca wskaznika " << wsk << "\n";
    cout << "wartosc zmiennej b za pomoca wskaznika " << *wsk << "\n";
    *wsk = *wsk + c;
    cout << "wartosc zmiennej B=" << b << "\n";
    return b;
}
int elo(float c, float a)
{
    float* wsk = &c;
    cout << "adres zmiennej c za pomoca wskaznika " << wsk << "\n";
    cout << "wartosc zmiennej c za pomoca wskaznika " << *wsk << "\n";
    *wsk = *wsk + a;
    cout << "wartosc zmiennej C=" << c << "\n";
    return c;
}
2

Nie wiem czy na pewno o to chodzi, ale do funkcji przekazujesz kopię wartości. Inna zmienna - inny adres. Wartościowa lektura: Przekazywanie parametru przez wartość i referencję

1
  1. Dlaczego wcięte masz funkcje elo...? To oczywiście "tylko" uwaga czytelnościowa, ale może świadczy o jakimś niezrozumieniu czegoś?
  2. Wskaźniki (adresy), które odzytujesz operatorem & nie są wskaźnikami do zmiennych lokalnych a, b, c zdefiniowanych w funkcji main, ale do lokalnych w poszczególnych funkcjach. Adresy nie są unikalne, bo zmienne lokalne dostają pewnie te same miejsca na stosie, co winnej funkcji.
  3. Oczywiście różne zmienne (nie referncje) mają różne adresy, co możesz sprawdzić odczytując ich wskaźniki w funkcji main...
  4. ... albo przekaując do funkcyj elo... przez referencje (dodając w parametrach & między float a nazwą zmiennej). Sprawdź.
0
kq napisał(a):

Nie wiem czy na pewno o to chodzi, ale do funkcji przekazujesz kopię wartości. Inna zmienna - inny adres. Wartościowa lektura: Przekazywanie parametru przez wartość i referencję

Dzieki pomoglo mi to :)

dodalem do funkcji * ampery do maina gwiazdki do elo i smiga :D

0

To teraz jeszcze przekaż przez referencję, bo przekazywanie przez wskaźnik z reguły implikuje, że można przekazać nullptr.

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