Dlaczego zapis:
(*wsk).km=4;
jest poprawny a
*(wsk).km=4;
lub *wsk.km=4;
już nie ?
Dlaczego zapis:
(*wsk).km=4;
jest poprawny a
*(wsk).km=4;
lub *wsk.km=4;
już nie ?
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.