Paziuch utworzono 10 czerwca 2017 utworzono 10 czerwca 2017 (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ę.
Matematyk0 komentarz 10 czerwca 2017 komentarz 10 czerwca 2017 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. 1
Ether_141 komentarz 4 września 2017 komentarz 4 września 2017 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 5 września 2017 komentarz 5 września 2017 (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).
Wciąż szukasz rozwiązania problemu? Napisz teraz na forum!
Możesz zadać pytanie bez konieczności rejestracji - wystarczy, że wypełnisz formularz.