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

c++ wskaźnik nie pokazuje wpisanej wartości

+2 głosów
965 wizyt
pytanie zadane 8 sierpnia 2017 w C i C++ przez Huberti Gaduła (4,500 p.)

Witam, dlaczego wskaźnik nie pokazuje wpisanej liczby?

Kod:

#include <iostream>

using namespace std;

int main()
{
    int ile;
    cin>>ile;
    int tablica[ile];
    int *wskaznik;
    wskaznik = tablica;
    for(int i=0;i<ile;i++)
    {
        cin>>*wskaznik;
        *wskaznik++;
    }
    cout<<*wskaznik;

    return 0;
}

 

2 odpowiedzi

+3 głosów
odpowiedź 8 sierpnia 2017 przez criss Mędrzec (172,570 p.)
wybrane 8 sierpnia 2017 przez Huberti
 
Najlepsza

Bo go przesuwasz. Po każdej iteracji przesuwasz wskaźnik o 1 (15. linia). Może spodziewałeś się inkrementacji inta wskazywanego przez wskaźnik, ale w rzeczywistości przesuwasz wskaźnik. Wynika to z pierwszeństwa operatorów. Tym samym operator dereferencji (gwiazdka) w tej samej linii jest bez znaczenia.
Jeśli pozwoliłbyś na inkrementacje wskaźnika tylko do tego momentu, żeby nie wyszedł poza zakres tablicy (np. jeśli i != ile-1), to w momencie ostatniego cout-a wskazywałby na ostatni element i wyświetli ci się ostatnia wpisana liczba.

komentarz 8 sierpnia 2017 przez Huberti Gaduła (4,500 p.)

Dziękuję za bardzo pomocna odpowiedź. Wcześniej nie zdawałem sobie sprawy z pierwszeństwa operatorów. Zapamiętam na przyszłość. wink

–6 głosów
odpowiedź 8 sierpnia 2017 przez Farmer Obywatel (1,150 p.)
a skąd on ma wziąć tą zmienną "ile"?
komentarz 8 sierpnia 2017 przez Farmer Obywatel (1,150 p.)
i zmiennych nie robimy w pętli tylko powyżej instrukcji "main" wstaw je tam dla pewności
komentarz 8 sierpnia 2017 przez Farmer Obywatel (1,150 p.)
pomiędzy "using namespace" a "int main()"
komentarz 8 sierpnia 2017 przez Huberti Gaduła (4,500 p.)
edycja 8 sierpnia 2017 przez Huberti
Po co mi zmienne globalne dla jednej funkcji?
komentarz 8 sierpnia 2017 przez Farmer Obywatel (1,150 p.)
nwm ja wole globalne no ale o gustach sie nie gada :)

może wskaźnik?
3
komentarz 8 sierpnia 2017 przez criss Mędrzec (172,570 p.)

i zmiennych nie robimy w pętli tylko powyżej instrukcji "main" wstaw je tam dla pewności
pomiędzy "using namespace" a "int main()"

 Uhm..? To nie jest gust, tylko szerzenie złych praktyk.

komentarz 8 sierpnia 2017 przez unknown Nałogowiec (39,560 p.)
Ktoś tu chyba przed chwilą obejrzał 1 odcinek kursu C++ MZ i chce się pochwalić zdobytą wiedzą
1
komentarz 8 sierpnia 2017 przez Huberti Gaduła (4,500 p.)
edycja 8 sierpnia 2017 przez Huberti

nwm ja wole globalne no ale o gustach sie nie gada :)

W tym programie umiejscowienie zmiennych faktycznie jest kwestią gustu, ale już w dużych projektach z wieloma funkcjami i procedurami potrafią zaoszczędzić sporo miejsca. 

W skrócie:

Zmienna globalna - widoczna dla wszystkich funkcji w programie.  Pozostaje w pamięci aż do zakończenia programu.

Zmienna lokalna - widoczna tylko dla funkcji w której się znajduje.  Jest niszczona po zakończeniu funkcji.

może wskaźnik?

Zmiana nazwy zmiennej niestety tu nie pomoże. 

Podobne pytania

0 głosów
2 odpowiedzi 7,462 wizyt
pytanie zadane 6 sierpnia 2017 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)
0 głosów
4 odpowiedzi 5,032 wizyt
pytanie zadane 4 kwietnia 2016 w C i C++ przez esp0x309 Użytkownik (510 p.)
0 głosów
0 odpowiedzi 880 wizyt
pytanie zadane 20 maja 2020 w C i C++ przez fortuna Początkujący (310 p.)

93,788 zapytań

142,753 odpowiedzi

323,429 komentarzy

63,393 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...