Zapis do wskaźnika pokazującego na obiekt

0

Dlaczego zapis:

(*wsk).km=4; 

jest poprawny a

*(wsk).km=4; 

lub *wsk.km=4;


już nie ?
2

To wynika z priorytetu operatorów w C i C++.

struct Test{
        int km;
    };

struct Test obj;
struct Test *wskaz = &obj;

// Użycie "gołego" wskaźnika
wskaz->km = 4;

// Użycie operatora wyłuskania. (*wskaz) zachowuje się jak obj.
(*wskaz).km = 4;

// Kompilator pomyśli, że wskaz jest jest strukturą, a nie wskaźnikiem do niej. Wystąpi błąd kompilacji.
// Tzn... może tak: żądasz dostępu do obiektu, który jest polem struktury, a to co stoi przed kropką nie jest strukturą.
// I tutaj górę bierze priorytet operatorów. Kropka jest tutaj uwzględniana wcześniej niż gwiazdka dlatego wskaz jest brane
// jako obiekt, a nie wskaźnik do obiektu.
*wskaz.km=4; 

Poczytaj o priorytetach operatorów to Ci się wiele wyjasni.

1 użytkowników online, w tym zalogowanych: 0, gości: 1