# Structures and Functions

Structures and functions in C can be seamlessly integrated to create modular and organized code for handling complex data structures. Let's explore how to work with structures and functions together:

## **Passing Structures to Functions**

* You can pass entire structures to functions, either by value or by reference.

  ```c
  struct Point {
      int x;
      int y;
  };

  void displayPoint(struct Point p) {
      printf("Point: (%d, %d)\n", p.x, p.y);
  }
  ```

Call the function with `displayPoint(myPoint);`.

## **Returning Structures from Functions**

* Functions can return structures, providing a convenient way to encapsulate data.

  ```c
  struct Point createPoint(int xVal, int yVal) {
      struct Point newPoint;
      newPoint.x = xVal;
      newPoint.y = yVal;
      return newPoint;
  }
  ```

Call the function: `struct Point result = createPoint(5, 10);`.

## **Passing Pointers to Structures**

* Pass pointers to structures for more efficient memory handling.

  ```c
  void initializePoint(struct Point *ptr, int xVal, int yVal) {
      ptr->x = xVal;
      ptr->y = yVal;
  }
  ```

Call the function: `initializePoint(&myPoint, 15, 20);`.

## **Array of Structures and Functions**

* Functions can work seamlessly with arrays of structures.

  ```c
  void displayPoints(struct Point arr[], int size) {
      for (int i = 0; i < size; ++i) {
          printf("Point %d: (%d, %d)\n", i + 1, arr[i].x, arr[i].y);
      }
  }
  ```

Call the function with `displayPoints(pointsArray, 5);`.

## **Structures as Function Arguments**

* When passing structures as function arguments, C uses pass-by-value semantics. However, it's efficient for small structures. For larger structures, passing a pointer is more practical.

Using structures with functions enhances code modularity, readability, and reusability. Whether dealing with individual points, arrays of points, or creating and manipulating structures within functions, this integration is essential for building scalable and organized C programs.

If you have specific questions or if there are additional topics you'd like to explore, feel free to ask!
