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

question-closed [C++] Problem z funkcją

Object Storage Arubacloud
0 głosów
419 wizyt
pytanie zadane 2 listopada 2017 w C i C++ przez PanJaqb Początkujący (360 p.)
zamknięte 2 listopada 2017 przez PanJaqb

Witam

Wykonuje proste zadanie z serwisu SPOJ o numerze 1016 (prędkość średnia z kursu), z tym że dodałem od siebie wskaźniki i prostą funkcje w związku z którą otrzymuję następujący błąd:

.../ expression list treated as compound expression in initializer [-fpermissive]|

kod:

#include <iostream>

int formula (int a, int b)
{
    int *wa=&a;
    int *wb=&b;

    return ((2 * *wa * *wb)/(*wa + *wb));
}

int main()
{
    int v1;     int *iv1=&v1;
    int v2;     int *iv2=&v2;
    int test;   int *itest=&test;


    std::cin >> *itest;

    for (int i=1; i<=*itest; i++)
    {
        std::cin >> *iv1;
        std::cin >> *iv2;

        int formula (*iv1, *iv2);
    }
}

 

Proszę o pomoc w rozwikłaniu problemu, oraz wskazówki w kodowaniu dla nowicjuszayes

komentarz zamknięcia: rozwiązanie problemu, nie poprawne wywołanie funkcji

1 odpowiedź

+2 głosów
odpowiedź 2 listopada 2017 przez Patrycjerz Mędrzec (192,320 p.)

Domyślam się, że sam rozumiesz błąd zawarty w poniższym kodzie, więc ja go jedynie podkreślę.

for (int i=1; i<=*itest; i++)
{
	std::cin >> *iv1;
	std::cin >> *iv2;

	int formula (*iv1, *iv2);
}

Tak w ogóle, po co ciągle używasz wskaźników przy dostępie do zmiennych? Sądzę, że jest to jedynie utrudnianie sobie życia, bez większej optymalizacji kodu. Jeśli ktoś bardziej obeznany ma inne zdanie na ten temat, to zapraszam do dyskusji.

komentarz 2 listopada 2017 przez PanJaqb Początkujący (360 p.)
ajajaj teraz to zauważyłem...

czemu ciągle używam? Nie wiem, wdrażam to czego się dowiedziałem natomiast nie umiem ocenić kiedy użycie wskaźnika będzie poprawne, tak naprawdę piszę póki co malutkie aplikacje i użycie w nich wskaźników w ogóle nic nie zmieni jeśli chodzi o sprawność wykonywania kodu...

Mam nadzieję, że czas doświadczenie i wasze uwagi pomogą mi w zdobywaniu cennego doświadczenia
1
komentarz 2 listopada 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)

Moja rada: jeśli nie ma potrzeby, nie używaj wskaźników. Proste wink

komentarz 2 listopada 2017 przez PanJaqb Początkujący (360 p.)
tu rodzi się pytanie skąd mam wiedzieć kiedy :)
Kiedy użyć? kiedy będzie to uzasadnione
1
komentarz 2 listopada 2017 przez mokrowski Mędrzec (155,460 p.)
Co do zasady, w nowoczesnym podejściu, wskaźników używasz wtedy gdy dany fragment kodu nie przejmuje elementu na własność oraz w przypadku gdy istotne są aspekty zajętości pamięci i w konsekwencji szybkość. W zasadzie przesyłając typy POD (int z wariantami, char z wariantami, long, float, double itp), nie opłaca się używać wskaźników.

Efektem ubocznym wskaźników jest ich błędo-genność (łatwo popełnić w nich błąd). Innym efektem jest możliwość ustawienia na nieprawidłową lub nieaktualną wartość. Pod tym względem referencja jest lepsza bo nie można jej ustawić na nieistniejący obiekt (tak wiem że są i tacy zdolni ale jest to trudniej uczynić).

Oczywiście nie jestem w stanie podać wszystkich zasad w małej objętości. Wybór sposobu przychodzi z doświadczeniem.
komentarz 2 listopada 2017 przez PanJaqb Początkujący (360 p.)

Nie pozostaję mi nic tylko kodować a doświadczenie przyjdzie, dziękuje za pigułkę wiedzy oraz odpowiedzi.yes

1
komentarz 2 listopada 2017 przez Patrycjerz Mędrzec (192,320 p.)
Wskaźników używa się w wielu zastosowaniach. Najpowszechniejszymi są wskazywanie na dany blok danych, np. przy przesyle oryginału zmiennej do funkcji, lub przy dynamicznej alokacji pamięci, np. za pomocą operatorów new i delete.

Przy programowaniu obiektowym wskaźniki stosuje się w celu wywołania metody klasy pochodnej przysłaniającej metodę o tej samej nazwie, ale z klasy bazowej, za pomocą wskaźnika na klasę bazową (czyt. polimorfizm).

Jeśli chodzi o optymalizację, to jednak wolę oprzeć swoje przekonania na doświadczeniu milionów programistów C i C++, w których kodzie nie widzę nigdzie takich kwiatków jak twoje triki ze wskaźnikami. Mogę nawet się domyślać, że taki kod jest mniej efektywny niż normalny — rewiduję to kodem języka asemblera wygenerowanym przez kompilator dla obu przypadków. Ten z sami zmiennymi jest krótszy, gdyż nie zawiera kolejnej zmiennej, jak i obliczania adresów przypisywanych do wskaźników.
komentarz 3 listopada 2017 przez PanJaqb Początkujący (360 p.)

Dziękuję za odpowiedź, ograniczę korzystanie ze wskaźników. yes

Podobne pytania

0 głosów
1 odpowiedź 243 wizyt
pytanie zadane 18 stycznia 2017 w C i C++ przez heros22pt Użytkownik (950 p.)
0 głosów
2 odpowiedzi 155 wizyt
pytanie zadane 28 września 2019 w C i C++ przez CandyyPL Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 491 wizyt
pytanie zadane 14 marca 2018 w C i C++ przez Sic Dyskutant (8,510 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,959 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!

...