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

Wskazniki C++ Zadanie, rozumowanie?

Object Storage Arubacloud
0 głosów
499 wizyt
pytanie zadane 12 grudnia 2018 w C i C++ przez Padoski Użytkownik (990 p.)

Witam, chciałem napisać program z wykorzystaniem wskaźników. Jego celem jest wypisanie najwiekszej wartosci oraz najmniejszej spośród dziesięciu podanych przez użytkownika. Mój kod to:

#include <iostream>

using namespace std;

    void najliczba(double *x);

int main()
{
    double tab[10];
    double *wsk = tab;
    cout << "Podaj 10 liczb: " << endl;
    for(int i=0;i<10;i++)
    {
        cin >>(wsk+i);
    }
    najliczba(wsk);
}
    void najliczba(double *x)
{
    double maximum =*x , minimum = *x;
    for(int i=0;i<10;i++)
    {
        if(*(x+i)>maximum)
        maximum = *(x+i);
    }
    cout<<"Najwieksza wartosc sposrod podanych to:"<<maximum<<endl;

    for(int i=0;i<10;i++)
    {
        if(*(x+i)<minimum)
        minimum = *(x+i);
    }
    cout<<"Najmniejsza wartosc sposrod podanych to: "<<minimum<<endl;
}

Błąd wyskakuje mi w tym miejscu :

 for(int i=0;i<10;i++)
    {
        cin >>(wsk+i);
    }

Wiem, że można to zrobić w taki sposób że poprostu piszę cin>> tab[i], lecz chciałem to zrobić na wskaźnikach. Czy jest taka możliwość oraz czy robi się w ten sposób? Mam prośbę jeszcze o ogolne sprawdzenie kodu, czy gdzieś jeszcze można użyć wskaźników, albo czy może gdzieś są one zbyteczne i co w tym kodzie można poprawić? Z góry dziękuję, pozdrawiam i czekam na odp :)

3 odpowiedzi

+1 głos
odpowiedź 12 grudnia 2018 przez Poczprogramista123 Bywalec (2,900 p.)
Powinno byc cin>>*(wsk+i). Nie zapominaj o gwiazdce. Gwiazdka mowi ze odnosisz sie do obietku a nie do wskaznika na ten obiekt.
komentarz 12 grudnia 2018 przez Padoski Użytkownik (990 p.)
też nie działa
komentarz 12 grudnia 2018 przez Poczprogramista123 Bywalec (2,900 p.)
Ale jak mozesz robic cos takiego.

double tab[5]

double *wsk=tab /// BLAD!!!

Takim zapisem tworzysz statyczna tablice na ktorej nie mozesz poslugiwac sie wskaznikiem. Zastap to dynamiczna tablica.
+1 głos
odpowiedź 12 grudnia 2018 przez kamerek Obywatel (1,260 p.)

Moim zdaniem powinno to wyglądać w taki sposób:

for(int i=0;i<10;i++)
    {
        cin >>(*(wsk+i));
    }

 

komentarz 12 grudnia 2018 przez monika90 Pasjonat (22,940 p.)

nawiasy nie są potrzebne, wystarczy cin >> *(wsk + i);

komentarz 12 grudnia 2018 przez Padoski Użytkownik (990 p.)
czy ten moj kod jest poprawny? chodzi mi o to ze np czy zwieksz wydajnosc pisanie *(wsk+i) zamiast tab[i], jakie korzysci z tego plyną, czy to nie jest to samo?( tak jak napisal u dolu profesorek 96) ?
0 głosów
odpowiedź 12 grudnia 2018 przez profesorek96 Szeryf (91,420 p.)
Nazwa tablicy to wskaźnik na element o indexie zero. Operator [] to inaczej operator dereferencji i zrobili go po to byś nie musiał pisać odwołując się do elementu o indeksie 4 w tablicy TAB

*(TAB + 4) tylko pisał TAB [4]
komentarz 12 grudnia 2018 przez Padoski Użytkownik (990 p.)

czyli z tego wynika ze zapis *(wsk+i) w tym przypadku jest zbyteczny tak? czyli pisac poprostu tab[i]? Czyli np :

for(int i=0;i<10;i++)
    {
        if(*(x+i)>maximum)
        maximum = *(x+i);
    }

w tym przypadku rownież powinienem użyc if(tab[i]>maximum) i będzie to równie wydajne jak (*(x+1)). Czy dobrze teraz rozumuje ?

komentarz 12 grudnia 2018 przez profesorek96 Szeryf (91,420 p.)
Zapis jaki ci pokazałem jest zamienny.

Podobne pytania

0 głosów
1 odpowiedź 293 wizyt
pytanie zadane 2 lutego 2019 w C i C++ przez Padoski Użytkownik (990 p.)
0 głosów
1 odpowiedź 361 wizyt
pytanie zadane 30 listopada 2022 w C i C++ przez Pysa6 Nowicjusz (220 p.)
0 głosów
1 odpowiedź 271 wizyt
pytanie zadane 14 listopada 2019 w C i C++ przez juske00 Początkujący (370 p.)

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...