Для структурування і групування (агрегації, ще кажуть) зв'язаних даних.
Порівняйте:
/*перевіряє, чи точка потрапляє в прямокутник*/
int pointInRect(int rectangleTop, int rectangleLeft, int rectangleBottom, int rectangleRight, int pointX, int pointY)
{
return ( pointX > rectangleTop ) &&
( pointX < rectangleBottom ) &&
( pointY > rectangleLeft ) &&
( pointY < rectangleRight );
}
/*і ще 10 схожих функцій, які активно викликають одна одну*/
з
typedef struct
{
int x, y;
}Point;
typedef struct
{
Point topLeft, bottomRight;
}Rectangle;
/*правда, тепер важко заплутатися в параметрах?*/
int pointInRect( Rectangle rectange, Point point )
{
return ( point.X > rectangle.topLeft.X ) &&
( point.X < rectangle.bottomRight.X ) &&
( point.Y > rectangle.topLeft.Y ) &&
( point.Y < rectangle.bottomRight.Y );
}
Проголошення типів зайняло трохи місця, але тепер ви точно не зможете передати в функцію одну з координат не того прямокутника (і, відповідно, не вб'єте 3 години на пошук незрозумілого бага), і сама функція стала значно коротше викликатися - тобто місце витрачене не дарма.