• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pytanie dotyczące inteligentnych wskaźników

42 Warsaw Coding Academy
0 głosów
134 wizyt
pytanie zadane 28 marca 2020 w C i C++ przez Quanti994 Początkujący (340 p.)

Jak wyglądałby kod z użyciem inteligentnych wskaźników równoważny temu:

#include <iostream>


int main()
{
    int a{30};
    int b;
    int*w;
    w=&a;

    std::cout<<"Wartosc zmiennej a: "<<*w<<"\n";
    std::cout<<"Adres zmiennej a: "<<w<<"\n";
    std::cout<<"Adres wskaznika w: "<<&w<<"\n";

    w=&b;
    std::cout<<"Podaj liczbe: ";
    std::cin>>*w;
    std::cout<<"Wartosc zmiennej b: "<<*w<<"\n";
}

 

1 odpowiedź

0 głosów
odpowiedź 28 marca 2020 przez Quanti994 Początkujący (340 p.)

Ok - rozwiązaniem problemu było użycie funkcji .reset() aby dać wskaźnik na nową zmienną i .get() aby uzyskać adres zmiennej na jaką wskazuje.

A jak jest z statycznymi tablicami i ich przekazywaniem przez inteligentne wskaźniki ?

Kod nie działa,nie kompiluje się.Zaznaczam że nie zależy mi na dynamicznej tablicy a statycznej.

#include <iostream>
#include <memory>

void fillArray(std::unique_ptr<int>&tab,const size_t arraySize)
{
    for(size_t i=0;i<arraySize;i++)
    {
        tab[i] =(2*i)+2;
    }
}

void showArray(const std::unique_ptr<int>&tab,const size_t arraySize)
{
    for(size_t i=0;i<arraySize;i++)
    {
        std::cout<<"tab["<<i<<"] = "<<tab[i]<<'\n';
    }
}


int main()
{
    const size_t ARRAY_SIZE{10};
    int evenNumbers[ARRAY_SIZE];

    std::unique_ptr<int>tab(new int(evenNumbers));

    fillArray(tab,ARRAY_SIZE);
    showArray(tab,ARRAY_SIZE);

    return 0;
}

 

komentarz 28 marca 2020 przez DragonCoder Nałogowiec (36,500 p.)
std::unique_ptr<int []>tab(new int [10]);

tak powinna wygladac tablica, tzn alokowanie tablicy przez smart pointer i new

EDIT::

pozwolilem sb wywalic te 2 pierwsze zmienne i uzyc 10

#include <iostream>
#include <memory>

void fillArray(std::unique_ptr<int []>&tab,const size_t arraySize) {
    for(size_t i=0;i<arraySize;i++) {
        tab[i] =(2*i)+2;
    }
}

void showArray(const std::unique_ptr<int [] >&tab,const size_t arraySize) {
    for(size_t i=0;i<arraySize;i++) {
        std::cout<<"tab["<<i<<"] = "<<tab[i]<<'\n';
    }
}


int main()
{
    std::unique_ptr<int []>tab(new int [10]);
    fillArray(tab,10);
    showArray(tab,10);

    return 0;
}

 

Podobne pytania

+1 głos
1 odpowiedź 360 wizyt
pytanie zadane 18 września 2017 w C i C++ przez Huberti Gaduła (4,500 p.)
0 głosów
2 odpowiedzi 218 wizyt
0 głosów
0 odpowiedzi 365 wizyt
pytanie zadane 8 lipca 2018 w C i C++ przez niezalogowany

93,382 zapytań

142,382 odpowiedzi

322,539 komentarzy

62,741 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...