Tak jest. Ale jest to zły styl. Nie bezpośrednia deklaracja struktury, ale bezpośrednia deklaracja typu wskaźnika. Jest to obfuskacja, informacja, że dana zmienna lub parametr jest wskaźnikiem (i w mniejszym stopniu dla tablic) jest niezwykle istotna, gdy chcemy przeczytać kod.
Podczas przeglądania kodu często trudno jest zauważyć na pierwszy rzut oka, która funkcja może wywoływać efekt uboczny. Jeśli użyte typy ukryją tę informację, dodaje ona do czytelnika obciążenie związane z zapamiętywaniem.
int do_fancy(vector a, vector b);
lub
int do_fancy(vector *a, vector *b);
w pierwszym przypadku można łatwo przegapić, że funkcja może zmienić treść a lub b. W drugim jestem ostrzeżony.
A kiedy faktycznie piszę kod, wiem również bezpośrednio, aby napisać a->x
i nie chcę, aby kompilator powiedział mi "coś", a nie strukturę lub związek ".
Wiem, wygląda to na osobisty gust, ale pracując z dużą ilością kodu zewnętrznego, mogę zapewnić, że jest to bardzo irytujące, gdy nie rozpoznajesz poziomu zmiennych w kierunku pośrednim. Jest to jeden z powodów, dla których nie lubię referencji w C++: (w Javie nie chodzi o to, że wszystkie obiekty są przekazywane przez odniesienie, są spójne) i typu Microsoftu LPCSTR
.
Wielkie dzięki, które ma sens. –
... a może 'const * S1CPTR'. – alecov
Po to, aby potwierdzić, że rozumiem. Jest to odpowiednik 'typedef struct {...} S1; typedef S1 * S1PTR; '? – DCShannon