x-kom hosting

[C++] Wskaźniki

Paziuch
utworzono
utworzono (edytowane)

Hej, mam problem ponieważ ucząc się o wskaźnikach i strukturach wyczytałem że jeśli identyfikatorem struktury jest nazwa używany kropki a jeśli wskaźnik używamy strzałki i tu rodzi się moje pytanie: Czemu cout w poniższym kodzie działa z kropką a nie ze strzałką skoro odwołuję się do wskażnika? Będę wdzięczny jak ktoś udzieli mi odpowiedzi. Z góry dziękuję ;)
 

#include <iostream>
#include <cstring>

using namespace std;

struct batonik
{
    char firma[20];
    int kalorie;
    float waga;
};


int main()
{

    batonik *b=new batonik[3]

    {
       {"mars",200,10.5},
       {"snikers",203,12.5}

    };

    cout<<"firma: "<<b[0].firma<<b[1].kalorie<<endl;

    delete[] b;

    return 0;
}

 

9 minut temu, Paziuch napisał:

cout<<"firma: "<<b[0].firma<<b[1].kalorie<<endl;

 

Tutaj mogłem dodać " kalorie: " przed b[1].kalorie. Byłoby tu czytelniejsze, ale chodziło mi raczej o działanie a nie o estetykę. 

Edytowane przez Paziuch

Matematyk0
komentarz
komentarz

Dlatego, że przy tablicy wskaźników, wpisanie indeksu tablicy ([0], [1], [2] itd.) powoduje przejście do tego, co jest w tym miejscu tablicy zapisane - czyli w tym wypadku bezpośrednio do struktury. Inaczej możesz to zapisać jako *(b+0), *(b+1), *(b+2) itd., jeżeli taki zapis jest dla Ciebie bardziej czytelny - oznacza dokładnie to samo i może to Ci podpowie, dlaczego to tak działa. Strzałki najczęściej są używane w funkcjach zewnętrznych, gdy jednym z parametrów jest wskaźnik.

 

Wskaźniki są dla wielu najtrudniejszą rzeczą do zrozumienia w C++ i zazwyczaj potrzeba naprawdę wiele praktyki, żeby to "poczuć" i swobodnie się tym posługiwać. Ale akurat błąd kropka/strzałka jest bardzo łatwy do wyeliminowania, kompilator zawsze zwraca błąd ze wskazówką, którego operatora się powinno użyć - strzałki lub kropki.

  • Dobra wypowiedź 1
  • 2 miesiące później...
Ether_141
komentarz
komentarz
Dnia 10.06.2017 o 23:18, Paziuch napisał:

Tutaj mogłem dodać " kalorie: " przed b[1].kalorie. Byłoby tu czytelniejsze, ale chodziło mi raczej o działanie a nie o estetykę. 

 

Tak na przyszłość: "estetyka" i wygląd kodu są bardzo ważne. Teraz może nie zwracasz na to uwagi bo piszesz proste i krótkie skrypty, ale póżniej jak będziesz pisał obszerniejsze i trudniejsze kody musisz na to zwrócić uwagę. Często jest tak, że potem po jakimś czasie nie rozumie się kodu którego samemu się napisało.

rafalluz
komentarz
komentarz (edytowane)
Quote

Czemu cout w poniższym kodzie działa z kropką a nie ze strzałką skoro odwołuję się do wskażnika?

 

Co masz na myśli, pisząc, że strzałki "nie działają"?

 

b[0].firma działa dokładnie tak samo jak b->firma

b[1].kalorie działa dokładnie tak samo jak (b+1)->kalorie.

 

Podpowiedź:

 

b i (b+1) są typu batonik* (wskaźnikami), b[0] i b[1] to typ batonik (nie wskaźnik).

Edytowane przez rafalluz

Wciąż szukasz rozwiązania problemu? Napisz teraz na forum!

Możesz zadać pytanie bez konieczności rejestracji - wystarczy, że wypełnisz formularz.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Strona wykorzystuje pliki cookies w celu prawidłowego świadczenia usług i wygody użytkowników. Warunki przechowywania i dostępu do plików cookies możesz zmienić w ustawieniach przeglądarki.